Compartir a través de


Función LowLevelKeyboardProc

Descripción

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 . El sistema llama a esta función cada vez que un nuevo evento de entrada de teclado está a punto de publicarse en una cola de entrada de subprocesos.

Nota

Cuando se llama a esta función de devolución de llamada en respuesta a un cambio en el estado de una clave, se llama a la función de devolución de llamada antes de actualizar el estado asincrónico de la clave. Por lo tanto, el estado asincrónico de la clave no se puede determinar llamando a GetAsyncKeyState desde dentro de la función de devolución de llamada.

El tipo HOOKPROC define un puntero a esta función de devolución de llamada. LowLevelKeyboardProc es un marcador de posición para el nombre de función definido por la aplicación o definido por la biblioteca.

LRESULT CALLBACK LowLevelKeyboardProc(
  _In_ int    nCode,
  _In_ WPARAM wParam,
  _In_ LPARAM lParam
);

Parámetros

código [in]

Tipo: int

Código que usa el procedimiento de enlace para determinar cómo procesar el mensaje.

Si nCode 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_ACTION 0 Los parámetros wParam y lParam contienen información sobre un mensaje de teclado.

wParam [in]

Tipo: WPARAM

Identificador del mensaje de teclado.

Este parámetro puede ser uno de los siguientes mensajes: WM_KEYDOWN, WM_KEYUP, WM_SYSKEYDOWN o WM_SYSKEYUP.

lParam [in]

Tipo: LPARAM

Puntero a una estructura KBDLLHOOKSTRUCT .

Devoluciones

Tipo: LRESULT

Si nCode es menor que cero, el procedimiento de enlace debe devolver el valor devuelto por CallNextHookEx.

Si nCode es mayor o igual que cero y el procedimiento de enlace no procesó el mensaje, se recomienda encarecidamente llamar a CallNextHookEx y devolver el valor que devuelve; de lo contrario, otras aplicaciones que han instalado WH_KEYBOARD_LL enlaces no recibirán notificaciones de enlace y pueden comportarse incorrectamente como resultado.

Si el procedimiento de enlace procesó el mensaje, puede devolver un valor distinto de cero para evitar que el sistema pase el mensaje al resto de la cadena de enlace o al procedimiento de ventana de destino.

Comentarios

Una aplicación instala el procedimiento de enlace especificando el tipo de enlace WH_KEYBOARD_LL y un puntero al procedimiento de enlace en una llamada a la función SetWindowsHookExA/SetWindowsHookExW .

Este enlace se llama en el contexto del subproceso que lo instaló. La llamada se realiza enviando un mensaje al subproceso que instaló el enlace. Por lo tanto, el subproceso que instaló el enlace debe tener un bucle de mensajes.

La entrada del teclado puede proceder del controlador de teclado local o de llamadas a la función keybd_event . Si la entrada procede de una llamada a keybd_event, la entrada se "insertó". Sin embargo, el enlace WH_KEYBOARD_LL no se inserta en otro proceso. En su lugar, el contexto vuelve al proceso que instaló el enlace y se llama en su contexto original. A continuación, el contexto vuelve a la aplicación que generó el evento.

El procedimiento de enlace debe procesar un mensaje en menos tiempo que la entrada de datos especificada en el valor LowLevelHooksTimeout en la siguiente clave del Registro:

HKEY_CURRENT_USER**\**Control Panel**\**Desktop

El valor se expresa en milisegundos. Si el procedimiento de enlace agota el tiempo de espera, el sistema pasa el mensaje al siguiente enlace. Sin embargo, en Windows 7 y versiones posteriores, el enlace se quita silenciosamente sin llamar a . No hay ninguna manera de que la aplicación sepa si se quita el enlace.

Windows 10, versión 1709 y posteriores El valor de tiempo de espera máximo que permite el sistema es de 1000 milisegundos (1 segundo). El sistema usará de forma predeterminada un tiempo de espera de 1000 milisegundos si el valor LowLevelHooksTimeout está establecido en un valor mayor que 1000.

Nota

Los enlaces de depuración no pueden realizar un seguimiento de este tipo de enlaces de teclado de bajo nivel. Si la aplicación debe usar enlaces de bajo nivel, debe ejecutar los enlaces en un subproceso dedicado que pasa el trabajo a un subproceso de trabajo y, a continuación, devuelve inmediatamente. En la mayoría de los casos en los que la aplicación necesita usar enlaces de bajo nivel, debe supervisar la entrada sin procesar en su lugar. Esto se debe a que la entrada sin procesar puede supervisar de forma asincrónica los mensajes de mouse y teclado destinados a otros subprocesos de forma más eficaz que los enlaces de bajo nivel. Para obtener más información sobre la entrada sin procesar, consulte Entrada sin procesar.

Vea también

CallNextHookEx

KBDLLHOOKSTRUCT

keybd_event

SetWindowsHookEx

WM_KEYDOWN

WM_KEYUP

WM_SYSKEYDOWN

WM_SYSKEYUP

Enlaces

Acerca de los enlaces