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.
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!¡.
Private Declare Function GetForegroundWindow Lib "user32" () As Long
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.
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 (http://www.recursosvisualbasic.com.ar/htm/listado-api/111-listar-ventana-de-window.htm)
Ahora si no se que pasa.
Tengo esto:
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?
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
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.