Función JournalPlaybackProc
Advertencia
Las API de enlaces de registro en diario no se admiten a partir de Windows 11 y se quitarán en una versión futura. Por este motivo, se recomienda encarecidamente llamar a la API SendInput TextInput en su lugar.
Función de devolución de llamada definida por la aplicación o definida por la biblioteca que se usa con la función SetWindowsHookExA/SetWindowsHookExW . La función registra los mensajes que el sistema quita de la cola de mensajes del sistema. Más adelante, una aplicación puede usar un procedimiento de enlace JournalPlaybackProc para reproducir los mensajes.
Nota
Normalmente, una aplicación usa esta función para reproducir una serie de mensajes de mouse y teclado grabados anteriormente por el procedimiento de enlace JournalRecordProc . Siempre que se instale un procedimiento de enlace JournalPlaybackProc , se deshabilita la entrada normal del mouse y del teclado.
El tipo HOOKPROC define un puntero a esta función de devolución de llamada. JournalRecordProc es un marcador de posición para el nombre de función definido por la aplicación o definido por la biblioteca.
LRESULT CALLBACK JournalRecordProc(
_In_ int code,
WPARAM wParam,
_In_ LPARAM lParam
);
Tipo: int
Código que usa el procedimiento de enlace para determinar cómo procesar el mensaje.
Si el código es menor que cero, el procedimiento de enlace debe pasar el mensaje a la función CallNextHookEx sin procesamiento adicional y debe devolver el valor devuelto por CallNextHookEx.
Este parámetro puede ser uno de los valores siguientes.
Valor | Significado |
---|---|
HC_GETNEXT 1 | El procedimiento de enlace debe copiar el mensaje actual del mouse o del teclado en la estructura EVENTMSG a la que apunta el parámetro lParam . |
HC_NOREMOVE 3 | Una aplicación ha llamado a la función PeekMessage con wRemoveMsg establecido en PM_NOREMOVE, lo que indica que el mensaje no se quita de la cola de mensajes después del procesamiento de PeekMessage . |
HC_NOREMOVE 2 | El procedimiento de enlace debe prepararse para copiar el siguiente mensaje del mouse o del teclado en la estructura EVENTMSG a la que apunta lParam. Al recibir el código HC_GETNEXT , el procedimiento de enlace debe copiar el mensaje en la estructura. |
HC_SYSMODALOFF 5 | Se ha destruido un cuadro de diálogo modal del sistema. El procedimiento de enlace debe reanudar la reproducción de los mensajes. |
HC_SYSMODALON 4 | Se muestra un cuadro de diálogo modal del sistema. Hasta que se destruye el cuadro de diálogo, el procedimiento de enlace debe dejar de reproducir mensajes. |
Tipo: WPARAM
Este parámetro no se utiliza.
Tipo: LPARAM
Puntero a una estructura EVENTMSG que representa un mensaje que procesa el procedimiento de enlace. Este parámetro solo es válido cuando se HC_GETNEXT el parámetro de código.
Tipo: LRESULT
Para que el sistema espere antes de procesar el mensaje, el valor devuelto debe ser la cantidad de tiempo, en tics de reloj, que el sistema debe esperar.
(Este valor se puede calcular calculando la diferencia entre los miembros de tiempo en los mensajes de entrada actuales y anteriores).
Para procesar el mensaje inmediatamente, el valor devuelto debe ser cero. El valor devuelto solo se usa si el código de enlace es HC_GETNEXT; de lo contrario, se omite.
Un procedimiento de enlace JournalPlaybackProc debe copiar un mensaje de entrada en el parámetro lParam . El mensaje debe haberse grabado previamente mediante un procedimiento de enlace JournalRecordProc , que no debe modificar el mensaje.
Para recuperar el mismo mensaje, se puede llamar varias veces al procedimiento de enlace con el parámetro de código establecido en HC_GETNEXT sin una llamada intermedia con el código establecido en HC_SKIP.
Si el código es HC_GETNEXT y el valor devuelto es mayor que cero, el sistema se suspende para el número de milisegundos especificados por el valor devuelto. Cuando el sistema continúa, llama de nuevo al procedimiento de enlace con el código establecido en HC_GETNEXT para recuperar el mismo mensaje. El valor devuelto de esta nueva llamada a JournalPlaybackProc debe ser cero; de lo contrario, el sistema volverá a estar en suspensión para el número de milisegundos especificado por el valor devuelto, vuelva a llamar a JournalPlaybackProc , etc. Parece que el sistema no responde.
A diferencia de la mayoría de los otros procedimientos de enlace global, los procedimientos de enlace JournalRecordProc y JournalPlaybackProc siempre se llaman en el contexto del subproceso que establece el enlace.
Después de que el procedimiento de enlace devuelva el control al sistema, el mensaje continúa siendo procesado. Si el código es HC_SKIP, el procedimiento de enlace debe prepararse para devolver el siguiente mensaje de evento grabado en su siguiente llamada.
Instale el procedimiento de enlace JournalPlaybackProc especificando el tipo de WH_JOURNALPLAYBACK y un puntero al procedimiento de enlace en una llamada a la función SetWindowsHookEx .
Si el usuario presiona CTRL+ESC O CTRL+ALT+SUPR durante la reproducción del diario, el sistema detiene la reproducción, desenganda el procedimiento de reproducción del diario y publica un mensaje de WM_CANCELJOURNAL en la aplicación de registro en diario.
Si el procedimiento de enlace devuelve un mensaje en el intervalo WM_KEYFIRST a WM_KEYLAST, se aplican las condiciones siguientes:
- El miembro paramL de la estructura EVENTMSG especifica el código de clave virtual de la tecla que se presionó.
- El miembro paramH de la estructura EVENTMSG especifica el código de examen.
- No hay ninguna manera de especificar un recuento de repeticiones. El evento siempre se toma para representar un evento clave.