Compartir a través de


Función LowLevelMouseProc

Description

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 del mouse está a punto de publicarse en una cola de entrada de subprocesos.

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

LowLevelMouseProc es un marcador de posición para el nombre de función definido por la aplicación o definido por la biblioteca.

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

Parámetros

nCode [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 siguientes valores.

Importancia Meaning
HC_ACTION 0 Los parámetros wParam y lParam contienen información sobre un mensaje del mouse.

wParam [in]

Tipo: WPARAM

Identificador del mensaje del mouse.

Este parámetro puede ser uno de los siguientes mensajes: WM_LBUTTONDOWN, WM_LBUTTONUP, WM_MOUSEMOVE, WM_MOUSEWHEEL, WM_RBUTTONDOWN, WM_RBUTTONUP, WM_MBUTTONDOWN, WM_MBUTTONUP, WM_XBUTTONDOWN o WM_XBUTTONUP.

lParam [in]

Tipo: LPARAM

Puntero a una estructura MSLLHOOKSTRUCT .

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_MOUSE_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.

Observaciones

Una aplicación instala el procedimiento de enlace especificando el tipo de enlace WH_MOUSE_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 mediante el envío de 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 mouse puede provenir del controlador del mouse local o de las llamadas a la función mouse_event . Si la entrada procede de una llamada a mouse_event, la entrada se "insertó". Sin embargo, el enlace WH_MOUSE_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 forma de que la aplicación sepa si se quita el enlace.

Windows 10, versión 1709 y posteriores El valor máximo de tiempo de espera 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 se establece en un valor superior a 1000.

Nota:

Los enlaces de depuración no pueden realizar un seguimiento de este tipo de enlaces de mouse 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.

Consulte también

CallNextHookEx

mouse_event

KBDLLHOOKSTRUCT

MSLLHOOKSTRUCT

SetWindowsHookEx

WM_LBUTTONDOWN

WM_LBUTTONUP

WM_MOUSEMOVE

WM_MOUSEWHEEL

WM_RBUTTONDOWN

WM_RBUTTONUP

Hooks

Acerca de los enlaces