Test Foro de elhacker.net SMF 2.1

Programación => .NET (C#, VB.NET, ASP) => Programación General => Programación Visual Basic => Mensaje iniciado por: Maik33 en 21 Junio 2010, 11:03 AM

Título: Ayuda hWnd
Publicado por: Maik33 en 21 Junio 2010, 11:03 AM
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.
Título: Re: Ayuda hWnd
Publicado por: BlackZeroX en 21 Junio 2010, 18:22 PM

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!¡.
Título: Re: Ayuda hWnd
Publicado por: xkiz ™ en 21 Junio 2010, 19:03 PM
Código (vb) [Seleccionar]
Private Declare Function GetForegroundWindow Lib "user32" () As Long
Título: Re: Ayuda hWnd
Publicado por: Maik33 en 21 Junio 2010, 19:05 PM
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.
Título: Re: Ayuda hWnd
Publicado por: Maik33 en 21 Junio 2010, 20:50 PM
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)
Título: Re: Ayuda hWnd
Publicado por: Maik33 en 22 Junio 2010, 11:27 AM
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?
Título: Re: Ayuda hWnd
Publicado por: Dessa en 22 Junio 2010, 12:13 PM


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








Título: Re: Ayuda hWnd
Publicado por: Maik33 en 22 Junio 2010, 12:28 PM
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.