Ayuda hWnd

Iniciado por Maik33, 21 Junio 2010, 11:03 AM

0 Miembros y 1 Visitante están viendo este tema.

Maik33

Hola,
Para saber el handle de una ventana se puede hacer mediante el titulo o la clase segun he encontrado en internet, pero hay alguna otra manera de saberlo? Por ejemplo por la ventana activa?
Gracias.

BlackZeroX


Código (Vb) [Seleccionar]


Private Declare Function GetActiveWindow Lib "user32" () As Long '   //  Ventana Actual.
'   //  Buscar por titulo de ventana u otra caracteristica!¡.
Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long



Dulce Infierno Lunar!¡.
The Dark Shadow is my passion.

xkiz ™

Código (vb) [Seleccionar]
Private Declare Function GetForegroundWindow Lib "user32" () As Long

Maik33

Gracias por responder,
Esque mira te comento lo que quiero hacer:
Hay un juego que te mueves por el teclado(tipico), pero si yo uso el keybd_event no las manda, pero cuando me sale un cuadro de texto para escribir, si funciona.
Entonces se me ha ocurrido hacer on SendMessage, por eso necesito el hWnd, y es posible que el hWnd que necesite no sea el de la ventana activa, sino de una ventana oculta.

Maik33

Hola otra vez,
He encontrado un ejemplo, muy bueno, y he descubierto que si hay una ventana oculta, ahora ya obtube el handle de esa ventana pero cuando hago sendmessage, sige sin funcionar. Alguna idea?
Gracias.

La pagina es:
http://www.recursosvisualbasic.com.ar/htm/listado-api/111-listar-ventana-de-window.htm

Maik33

Ahora si no se que pasa.

Tengo esto:
Código (vb) [Seleccionar]
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long

Private Const WM_KEYDOWN As Long = &H100

Dim h As Long

Private Sub Command1_Click()
    h = FindWindow(vbNullString, "a - Bloc de notas")
    Timer1.Interval = 1000
End Sub

Private Sub Timer1_Timer()
    SendMessage h, WM_KEYDOWN, vbKeyA, 0&
End Sub


Pero en el block de notas no sale la "a"  :huh:

Alguna idea?

Dessa

#6


Option Explicit

Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long

'Private Const WM_KEYDOWN As Long = &H100

Dim h As Long

Private Sub Command1_Click()
    Shell ("notepad"), vbNormalFocus
    h = FindWindow("notepad", vbNullString)
    h = FindWindowEx(h, 0, "Edit", vbNullString)

  Timer1.Interval = 100
End Sub


Private Sub Timer1_Timer()
 Call SendMessage(h, &H102, vbKeyA, 0&)
End Sub







EDIT:

Private Sub Timer1_Timer()
  If h <> 0 Then Call SendMessage(h, &H102, vbKeyA, 0&)
End Sub








Adrian Desanti

Maik33

Funciona!!! Gracias Dessa.
Un par de cosillas, el &H102 a que corresponde? como &H100 es KEYDOWN, el otro?
La otra cosa es que lo del block de notas era para hacer una prueba, yo lo que quiero es hacer lo mismo pero para un juego, y no se me ocurre nada.