Поделиться через


Функция обратного вызова KeyboardProc

Описание

Определяемая приложением или библиотекой функция обратного вызова, используемая с функцией SetWindowsHookExA/SetWindowsHookExW .

Система вызывает эту функцию всякий раз, когда приложение вызывает функцию GetMessage или PeekMessageA/PeekMessageW и появляется сообщение клавиатуры (WM_KEYUP или WM_KEYDOWN для обработки.

Тип HOOKPROC определяет указатель на эту функцию обратного вызова. KeyboardProc — это заполнитель для имени определяемой приложением или библиотекой функции.

LRESULT CALLBACK KeyboardProc(
  _In_ int    code,
  _In_ WPARAM wParam,
  _In_ LPARAM lParam
);

Параметры

code [in]

Тип: int

Код, который используется процедурой перехватчика для определения способа обработки сообщения.

Если код меньше нуля, процедура перехватчика должна передать сообщение функции CallNextHookEx без дальнейшей обработки и возвращать значение, возвращаемое CallNextHookEx.

Этот параметр может принимать одно из указанных ниже значений.

Значение Значение
HC_ACTION 0 Параметры wParam и lParam содержат сведения о сообщении нажатия клавиши.
HC_NOREMOVE 3 Параметры wParam и lParam содержат сведения о сообщении о нажатии клавиши, и сообщение о нажатии клавиши не было удалено из очереди сообщений. (Приложение с именем функции PeekMessage , указывающее флаг PM_NOREMOVE .)

wParam [in]

Тип: WPARAM

Код виртуального ключа ключа, создающего сообщение о нажатии клавиши.

lParam [in]

Тип: LPARAM

Число повторов, код сканирования, флаг расширенного ключа, код контекста, флаг предыдущего состояния ключа и флаг состояния перехода. Дополнительные сведения о параметре lParam см. в разделе Флаги сообщений нажатия клавиш. В следующей таблице описаны биты этого значения.

Bits Описание
0—15 Число повторов. Значение — это количество повторений нажатия клавиши в результате удерживания клавиши пользователем.
16—23 Код сканирования. Значение зависит от изготовителя оборудования.
24 Указывает, является ли клавиша расширенной клавишей, например функциональной клавишей или клавишей на цифровой клавиатуре. Значение равно 1, если ключ является расширенным; в противном случае — 0.
25-28 Зарезервировано.
29 Код контекста. Значение равно 1, если клавиша ALT не работает; в противном случае — 0.
30 Предыдущее состояние ключа. Значение равно 1, если ключ не работает перед отправкой сообщения; Значение равно 0, если ключ включен.
31 Состояние перехода. Значение равно 0, если клавиша нажата, и 1, если она отпускается.

Возвращаемое значение

Тип: LRESULT

Если код меньше нуля, процедура перехватчика должна возвращать значение, возвращенное CallNextHookEx.

Если код больше или равен нулю, а процедура перехватчика не обработала сообщение, настоятельно рекомендуется вызвать CallNextHookEx и вернуть возвращаемое значение. В противном случае другие приложения, установленные WH_KEYBOARD перехватчиками, не будут получать уведомления о перехватчиках и могут работать неправильно.

Если процедура перехватчика обработала сообщение, она может вернуть ненулевое значение, чтобы система не передала сообщение в остальную часть цепочки перехватчиков или в процедуру целевого окна.

Комментарии

Приложение устанавливает процедуру перехватчика, указывая тип перехватчика WH_KEYBOARD и указатель на процедуру перехватчика в вызове функции SetWindowsHookExA/SetWindowsHookExW .

Этот перехватчик может вызываться в контексте потока, который его установил. Вызов выполняется путем отправки сообщения в поток, который установил перехватчик. Поэтому поток, который установил перехватчик, должен иметь цикл сообщений.

См. также раздел