Red de conocimiento informático - Problemas con los teléfonos móviles - Código de reproducción de teclado y mouse VB

Código de reproducción de teclado y mouse VB

Muchos software de enseñanza o software de monitoreo del sistema pueden grabar y reproducir automáticamente operaciones como la entrada de texto por parte del usuario o el clic de botones. Esta función se realiza utilizando la función Hook del sistema Windows.

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>

Si PlayLog gt; = EventLog Entonces

Desenganche el HookEx hPlay del sistema Windows

Finalice

PlaybackProc = Resultado

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