Partilhar via


Função LowLevelMouseProc

Descrição

Uma função de retorno de chamada definida pelo aplicativo ou definida pela biblioteca usada com a função SetWindowsHookExA/SetWindowsHookExW . O sistema chama essa função sempre que um novo evento de entrada do mouse está prestes a ser postado em uma fila de entrada de thread.

O tipo HOOKPROC define um ponteiro para essa função de retorno de chamada. LowLevelMouseProc é um espaço reservado para o nome da função definida pelo aplicativo ou definida pela biblioteca.

LowLevelMouseProc é um espaço reservado para o nome da função definida pelo aplicativo ou definida pela biblioteca.

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

Parâmetros

nCode [in]

Tipo: int

Um código que o procedimento de gancho usa para determinar como processar a mensagem.

Se nCode for menor que zero, o procedimento de gancho deverá passar a mensagem para a função CallNextHookEx sem processamento adicional e deverá retornar o valor retornado por CallNextHookEx.

Esse parâmetro pode usar um dos valores a seguir.

Valor Significado
HC_ACTION 0 Os parâmetros wParam e lParam contêm informações sobre uma mensagem do mouse.

wParam [in]

Tipo: WPARAM

O identificador da mensagem do mouse.

Esse parâmetro pode ser uma das seguintes mensagens: WM_LBUTTONDOWN, WM_LBUTTONUP, WM_MOUSEMOVE, WM_MOUSEWHEEL, WM_RBUTTONDOWN ou WM_RBUTTONUP.

lParam [in]

Tipo: LPARAM

Um ponteiro para uma estrutura MSLLHOOKSTRUCT .

Retornos

Tipo: LRESULT

Se nCode for menor que zero, o procedimento de gancho deverá retornar o valor retornado por CallNextHookEx.

Se nCode for maior ou igual a zero e o procedimento de gancho não processar a mensagem, é altamente recomendável que você chame CallNextHookEx e retorne o valor retornado; caso contrário, outros aplicativos que instalaram ganchos de WH_MOUSE_LL não receberão notificações de gancho e poderão se comportar incorretamente como resultado.

Se o procedimento de gancho tiver processado a mensagem, ele poderá retornar um valor diferente de zero para impedir que o sistema passe a mensagem para o restante da cadeia de ganchos ou o procedimento da janela de destino.

Comentários

Um aplicativo instala o procedimento de gancho especificando o tipo de gancho WH_MOUSE_LL e um ponteiro para o procedimento de gancho em uma chamada para a função SetWindowsHookExA/SetWindowsHookExW .

Esse gancho é chamado no contexto do thread que o instalou. A chamada é feita enviando uma mensagem para o thread que instalou o gancho. Portanto, o thread que instalou o gancho deve ter um loop de mensagem.

A entrada do mouse pode vir do driver do mouse local ou de chamadas para a função mouse_event . Se a entrada vier de uma chamada para mouse_event, a entrada foi "injetada". No entanto, o gancho de WH_MOUSE_LL não é injetado em outro processo. Em vez disso, o contexto volta para o processo que instalou o gancho e é chamado em seu contexto original. Em seguida, o contexto volta para o aplicativo que gerou o evento.

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

HKEY_CURRENT_USER\Control Panel\Desktop

O valor está em milissegundos. Se o procedimento de gancho atingir o tempo limite, o sistema passará a mensagem para o próximo gancho. No entanto, no Windows 7 e posterior, o gancho é removido silenciosamente sem ser chamado. Não há como o aplicativo saber se o gancho foi removido.

Windows 10 versão 1709 e posterior O valor máximo de tempo limite que o sistema permite é 1000 milissegundos (1 segundo). O sistema usará um tempo limite de 1000 milissegundos por padrão se o valor LowLevelHooksTimeout for definido como um valor maior que 1000.

Observação

Os ganchos de depuração não podem rastrear esse tipo de ganchos de mouse de baixo nível. Se o aplicativo precisar usar ganchos de baixo nível, ele deverá executar os ganchos em um thread dedicado que passa o trabalho para um thread de trabalho e, em seguida, retornará imediatamente. Na maioria dos casos em que o aplicativo precisa usar ganchos de baixo nível, ele deve monitorar a entrada bruta. Isso ocorre porque a entrada bruta pode monitorar de forma assíncrona mensagens de mouse e teclado que são direcionadas para outros threads com mais eficiência do que ganchos de baixo nível podem. Para obter mais informações sobre entrada bruta, consulte Entrada bruta.

Confira também

CallNextHookEx

mouse_event

KBDLLHOOKSTRUCT

MSLLHOOKSTRUCT

SetWindowsHookEx

WM_LBUTTONDOWN

WM_LBUTTONUP

WM_MOUSEMOVE

WM_MOUSEWHEEL

WM_RBUTTONDOWN

WM_RBUTTONUP

Ganchos

Sobre ganchos