Функция обратного вызова 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 .
Этот перехватчик может вызываться в контексте потока, который его установил. Вызов выполняется путем отправки сообщения в поток, который установил перехватчик. Поэтому поток, который установил перехватчик, должен иметь цикл сообщений.