Función LowLevelMouseProc

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 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 la biblioteca.

LowLevelMouseProc es un marcador de posición para el nombre de función definido por la aplicación o 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 valores siguientes.

Valor Significado
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 o WM_RBUTTONUP.

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.

Comentarios

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

Vea también

CallNextHookEx

mouse_event

KBDLLHOOKSTRUCT

MSLLHOOKSTRUCT

SetWindowsHookEx

WM_LBUTTONDOWN

WM_LBUTTONUP

WM_MOUSEMOVE

WM_MOUSEWHEEL

WM_RBUTTONDOWN

WM_RBUTTONUP

Enlaces

Acerca de los enlaces