[RESUELTO]como simular pulsacion de teclas

Iniciado por AlxSpy, 5 Marzo 2011, 21:07 PM

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

AlxSpy

quiero hacer un codigo que envie pulsaciones a "x" ventana que no este activa con sendmessage ,pasandola un handle, como simular los eventos keydown-keyup-keypress del textbox, tengo este code:



'emisor de mensajes
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Long) As Long


Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)


Const WM_KEYDOWN As Integer = &H100
Const WM_KEYUP As Integer = &H101
Const VK_SPACE = &H20
Private Sub cmdCommand1_Click()
   Dim hwnd As Long
   hwnd = Val(txtHWND) 'handle del textbox receptor
   SendMessage hwnd, WM_KEYDOWN, 65, 0&
   'Sleep 1000
   SendMessage hwnd, WM_KEYUP, 65, 0&
End Sub



para hacer las pruebas hice otro code ya compilado donde tiene un textbox que recibira los  mensajes de pulsacion y los mostrarà en otro textbox:


'receptor de mensajes
Private Sub Form_Load()
   txtHwnd.Text = txt.hWnd 'muestra su handle
End Sub

Private Sub txt_KeyDown(KeyCode As Integer, Shift As Integer)
   txtRes.Text = txtRes.Text & "[KeyDown] Keycode: " & KeyCode & ", Shift: " & Shift & vbCrLf
End Sub

Private Sub txt_KeyPress(KeyAscii As Integer)
   txtRes.Text = txtRes.Text & "[KeyPress] KeyAscii: " & KeyAscii & vbCrLf
End Sub

Private Sub txt_KeyUp(KeyCode As Integer, Shift As Integer)
   txtRes.Text = txtRes.Text & "[KeyUp] KeyCode: " & KeyCode & ", Shift: " & Shift & vbCrLf
End Sub


he corrido ambos pero no se reciben los mensajes, ademas probe agregandole una pausa con sleep pero no da resultado, que podria estar mal en este codigo?

raul338

Cita de: alxspy en  5 Marzo 2011, 21:07 PM

    Dim hwnd As Long
    hwnd = Val(txtHWND) 'handle del textbox receptor


seguro que es un handle valido? O querias hacer txtHWND.handle (no creo)
Asegurate de que hwnd exista, puedes ver el handle de la ventana con Spy++ o elemental code hizo un "form flotante" que te dice el titulo, handle y clase de la ventana que esta debajo del puntero del mouse

AlxSpy

el hwnd que le paso al emisor es el numerito que se obtiene en form_load en el receptor (txt.hwnd). ah se me olvido, esto es en visual 6.0.

seba123neo

Hola, proba con PostMessage..

Código (vb) [Seleccionar]
Option Explicit

Private Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long

Private Const VK_RETURN = &HD
Private Const WM_KEYDOWN = &H100
Private Const WM_KEYUP = &H101
Private Const VK_SPACE = &H20

Private Sub Command1_Click()
    Call PostMessage(Text1.Text, WM_KEYDOWN, VK_RETURN, 0&)
    Call PostMessage(Text1.Text, WM_KEYUP, VK_RETURN, 0&)
End Sub


esto envia un enter al Handle que pongas en el textbox.

saludos.
La característica extraordinaria de las leyes de la física es que se aplican en todos lados, sea que tú elijas o no creer en ellas. Lo bueno de las ciencias es que siempre tienen la verdad, quieras creerla o no.

Neil deGrasse Tyson

AlxSpy