Código de reproducción de teclado y mouse VB
Este artículo presentará cómo usar VB para grabar y reproducir operaciones del mouse y el teclado.
El sistema Windows proporciona la función API SetwindowsHookEx para establecer Hook. A través de esta función, se puede agregar un programa a la cadena Hook para monitorear los
mensajes del sistema Windows. La función es la siguiente:
Función de declaración pública SetwindowsHookEx Lib "user32" _
Alias "Set Windows System HookExA" _
(ByVal idHook As Long , _
ByVal lpfn Mientras, _
ByVal hmod Mientras, _
ByVal dwThreadId Mientras) Mientras
El El parámetro idHook especifica la vista creada. El tipo de función de vigilancia. Como puede ver en la Ayuda de MSDN para sistemas Windows, la función SetwindowsHookEx proporciona 15 tipos diferentes de monitoreo de mensajes. Aquí usaremos WH_JOURNALRECORD, WH_JOURNALRECORD y WH_JOURNALLPLAYBACK para monitorear las operaciones del teclado y el mouse. El parámetro lpfn especifica una función de mensaje que se llama después de generar el mensaje correspondiente y pasa el valor del mensaje a la función para su procesamiento. La forma general de la función es:
Hookproc (código: Integer; wparam: WPARAM; lparam: LPARAM): LRESULT stdcall
Entre ellos, el código es el indicador del sistema, wParam; y lParam son parámetros adicionales, que varían según el tipo de mensaje que se monitorea. Puede crear una función de este tipo en su programa y agregarla a la cadena de vigilancia de mensajes a través de la función SetwindowsHookEx para manejar mensajes.
Cuando no necesite monitorear los mensajes del sistema, deberá llamar a UnHook Windows HookEx para cancelar el monitoreo de los mensajes.
Los tipos WH_JOURNALRECORD y WH_JOURNALRECORD son dos tipos de Hook opuestos. El primero obtiene mensajes de operación del mouse y el teclado, y el segundo reproduce mensajes del teclado con etiquetas
del mouse. Por lo tanto, necesitamos crear dos funciones de mensaje en el programa, una para registrar las operaciones del mouse y el teclado y guardarlas en una matriz, y la otra para devolver las operaciones guardadas al sistema para su reproducción.
La siguiente es la implementación específica del programa: primero cree un nuevo proyecto, agregue tres controles CommandButton en Form1 para controlar los enlaces de mensajes, además
También puede agregar múltiples controles CommandButton o TextBox control para comprobar el efecto de reproducción de la operación.
Luego agregue un archivo de módulo al proyecto y agregue la siguiente
definición y código en el módulo:
Opción explícita
Tipo público EVENTMSG
mensaje Mientras
paramL Mientras
paramH Mientras
tiempo Mientras
hwnd Mientras
Tipo de finalización
Función de declaración pública CallNextHookEx Lib "user32" _
(ByVal hHook As Long, _
ByVal ncode As Long, _
ByVal wParam As Long, _
ByVal lParam As Long) As Long
Función de declaración pública Establecer ventana Sistema HookEx Lib "user32" _
Alias "Establecer HookExA del sistema Windows" _
(ByVal idHook As Long, _
ByVal lpfn As Long, _
ByVal hmod As Long, _
ByVal dwThreadId As Long) As Long
Declaración pública Sub CopyMemoryT2H Lib "kernel32" _
Alias "RtlMoveMemory" _
(ByVal Dest mientras, _
(ByVal Dest mientras, _
) _
Fuente como EVENTMSG, _
ByVal Longitud As Long )
Declaración pública Sub CopyMemoryH2T Lib "kernel32" _
Alias "RtlMoveMemory" _ <
(Dest As EVENTMSG, _
Fuente ByVal siempre,
Longitud ByVal tan larga)
Función de declaración pública Desenganchar sistema Windows HookEx Lib "user32" _
( ByVal hHook As Long) As Long
Const pública WH_JOURNALRECORD = 1
Const pública WH_JOURNALRECORD = 0
Const pública HC_SYSMODALOFF = 5
Const pública HC_SYSMODALON = 4
Const pública HC_SKIP = 2
Const pública HC_GETNEXT = 1
<p>Constante pública HC_ACTION = 0
EventArr público(1000) como EVENTMSG
Registro de eventos público siempre
Registro de reproducción público siempre
Public hHookTanto tiempo
Público hReproducir tanto tiempo
Público recoOK tanto tiempo
Público puede reproducir tanto tiempo
Público bDelay como booleano
Función pública HookProc(ByVal iCode mientras, ByVal wParam mientras, _
ByVal lParam mientras) mientras
Resultado tenue mientras
recOK = 1
Resultado = 0
Si iCode lt; 0 entonces 'iCode es menor que 0 y la siguiente función de enlace de mensaje debe llamarse directamente
Resultado = CallNextHookEx( hHook, iCode, wParam, lParam)
ElseIf iCode = HC_SYSMODALON Entonces 'No permitir grabación
recOK = 0
ElseIf iCode = HC_SYSMODALOFF Luego 'Permitir grabación
recOK = 1
ElseIf ((recOK gt; 0)) And (iCode = HC_ACTION)) Luego
'Registrar información en el cola de registros
CopyMemoryH2T EventArr(EventLog), lParam, Len(EventArr(EventLog))
EventLog = EventLog 1
Si EventLog gt = 1000 Entonces
'Cuando esté grabado Suelte el gancho del mensaje cuando sea mayor que 1000
Desenganche el sistema HookEx hHook de Windows
Finalizar si
Finalizar si
HookProc = Resultado
Función final
Función pública PlaybackProc(ByVal iCode As Long, ByVal wParam As Long, _
ByVal lParam As Long) As Long
Resultado atenuado siempre que
canPlay = 1
Resultado = 0
Si iCode lt 0 entonces 'iCode es menor que 0; y se debe llamar a la siguiente función de enlace de mensaje
Result = CallNextHookEx(hPlay, iCode, wParam, lParam)
ElseIf iCode = HC_SYSMODALON Then 'No se permite la reproducción
Reproducir
canPlay = 0
ElseIf iCode = HC_SYSMODALOFF Entonces 'Permitir reproducir
canPlay = 1
ElseIf ((canPlay = 1) Y (iCode = HC_GETNEXT))Entonces
Si bDelay Entonces
bDelay = False
Resultado = 50
Fin si
'Toma el mensaje de la cola de registros y entrégalo al área EVENTMSG señalada por el puntero lParam
CopyMemoryT2H lParam、EventArr(PlayLog)、Len(EventArr(EventLog))
ElseIf ((canPlay = 1) And (iCode = HC_SKIP))
bDelay = True
PlayLog = PlayLog 1
End If p>
p>
Si PlayLog gt; = EventLog Entonces
Desenganche el HookEx hPlay del sistema Windows
Finalice
PlaybackProc = Resultado p>
Función final
Agregue el siguiente código en la ventana de código de Form1:
Opción explícita
Subcomando privado1_Click()
Registro de eventos = 0