Partilhar via


Função LowLevelKeyboardProc

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 de teclado está prestes a ser postado em uma fila de entrada de thread.

Observação

Quando essa função de retorno de chamada é chamada em resposta a uma alteração no estado de uma chave, a função de retorno de chamada é chamada antes que o estado assíncrono da chave seja atualizado. Consequentemente, o estado assíncrono da chave não pode ser determinado chamando GetAsyncKeyState de dentro da função de retorno de chamada.

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

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

Parâmetros

code [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 de teclado.

wParam [in]

Tipo: WPARAM

O identificador da mensagem de teclado.

Esse parâmetro pode ser uma das seguintes mensagens: WM_KEYDOWN, WM_KEYUP, WM_SYSKEYDOWN ou WM_SYSKEYUP.

lParam [in]

Tipo: LPARAM

Um ponteiro para uma estrutura KBDLLHOOKSTRUCT .

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_KEYBOARD_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_KEYBOARD_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 teclado pode vir do driver de teclado local ou de chamadas para a função keybd_event . Se a entrada for proveniente de uma chamada para keybd_event, a entrada foi "injetada". No entanto, o gancho de WH_KEYBOARD_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 teclado 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

KBDLLHOOKSTRUCT

keybd_event

SetWindowsHookEx

WM_KEYDOWN

WM_KEYUP

WM_SYSKEYDOWN

WM_SYSKEYUP

Ganchos

Sobre ganchos