Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
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.