Partilhar via


Função LowLevelMouseProc

Description

Uma função de callback definida por aplicação ou biblioteca usada com a função SetWindowsHookExA/SetWindowsHookExW . O sistema chama esta função sempre que um novo evento de entrada do rato está prestes a ser publicado numa fila de entrada de thread.

O tipo HOOKPROC define um ponteiro para esta função de callback. LowLevelMouseProc é um marcador de posição para o nome da função definida pela aplicação ou pela biblioteca.

LowLevelMouseProc é um marcador de posição para o nome da função definida pela aplicação ou pela biblioteca.

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

Parâmetros

nCode [em]

Tipo: int

Um código que o procedimento de hook utiliza para determinar como processar a mensagem.

Se nCode for inferior a zero, o procedimento de hook deve passar a mensagem para a função CallNextHookEx sem processamento adicional e deve devolver o valor devolvido pelo CallNextHookEx.

Este parâmetro pode ser um dos seguintes valores.

Valor Meaning
HC_ACTION 0 Os parâmetros wParam e lParam contêm informação sobre uma mensagem de rato.

wParam [em]

Tipo: WPARAM

O identificador da mensagem do rato.

Este parâmetro pode ser uma das seguintes mensagens: WM_LBUTTONDOWN, WM_LBUTTONUP, WM_MOUSEMOVE, WM_MOUSEWHEEL, WM_RBUTTONDOWN, WM_RBUTTONUP, WM_MBUTTONDOWN, WM_MBUTTONUP, WM_XBUTTONDOWN ou WM_XBUTTONUP.

IParam [em]

Tipo: LPARAM

Um apontador para uma estrutura MSLLHOOKSTRUCT .

Devoluções

Tipo: LRESULT

Se nCode for inferior a zero, o procedimento de hook deve devolver o valor devolvido pelo CallNextHookEx.

Se o nCode for maior ou igual a zero, e o procedimento de hook não processou a mensagem, é altamente recomendado que ligue para o CallNextHookEx e devolva o valor que ela devolve; caso contrário, outras aplicações que tenham instalado WH_MOUSE_LL hooks não receberão notificações de hook e podem comportar-se incorretamente como resultado.

Se o procedimento de hook processar a mensagem, pode devolver um valor diferente de zero para impedir que o sistema passe a mensagem para o resto da cadeia de hook ou para o procedimento da janela de destino.

Observações

Uma aplicação instala o procedimento de hook especificando o tipo de hook WH_MOUSE_LL e um ponteiro para o procedimento hook numa chamada à função SetWindowsHookExA/SetWindowsHookExW .

Este hook é chamado no contexto do tópico que o instalou. A chamada é feita enviando uma mensagem para o fio que instalou o gancho. Portanto, a thread que instalou o gancho deve ter um loop de mensagens.

A entrada do rato pode vir do driver local ou das chamadas à função mouse_event . Se a entrada vier de uma chamada para mouse_event, a entrada foi "injetada". No entanto, o gancho WH_MOUSE_LL não é injetado noutro processo. Em vez disso, o contexto volta ao processo que instalou o gancho e é chamado no seu contexto original. Depois, o contexto volta para a aplicação que gerou o evento.

O procedimento de hook deve processar uma mensagem em menos tempo do que a entrada de dados especificada no valor LowLevelHooksTimeout na seguinte chave de registo:

HKEY_CURRENT_USER\Control Panel\Desktop

O valor é em milissegundos. Se o procedimento de hook expirar, o sistema passa a mensagem para o hook seguinte. No entanto, no Windows 7 e versões posteriores, o hook é silenciosamente removido sem ser chamado. Não há forma de a aplicação saber se o gancho foi removido.

Windows 10 versão 1709 e posteriores O valor máximo de timeout permitido pelo sistema é de 1000 milissegundos (1 segundo). O sistema irá usar por defeito um timeout de 1000 milissegundos se o valor LowLevelHooksTimeout for definido para um valor superior a 1000.

Observação

Os ganchos de depuração não conseguem rastrear este tipo de ganchos de rato de baixo nível. Se a aplicação tiver de usar hooks de baixo nível, deve executar os hooks numa thread dedicada que passa o trabalho para uma thread worker e depois retorna imediatamente. Na maioria dos casos em que a aplicação precisa de usar ganchos de baixo nível, deve monitorizar a entrada bruta. Isto porque a entrada bruta pode monitorizar de forma assíncrona mensagens de rato e teclado direcionadas a outras threads de forma mais eficaz do que hooks de baixo nível. Para mais informações sobre entrada bruta, veja Entrada bruta.

Consulte também

CallNextHookEx

mouse_event

KBDLLHOOKSTRUCT

MSLLHOOKSTRUCT

SetWindowsHookEx

WM_LBUTTONDOWN

WM_LBUTTONUP

WM_MOUSEMOVE

WM_MOUSEWHEEL

WM_RBUTTONDOWN

WM_RBUTTONUP

Hooks

Sobre Hooks