Функция KeyboardProc
Процедура фильтра (hook) KeyboardProc - определяемая программой или определяемая библиотекой функция повторного вызова, используемая функцией SetWindowsHookEx. Система вызывает эту функцию всякий раз, когда приложение вызывает функцию GetMessage или PeekMessage и есть сообщение клавиатуры (WM_KEYUP или WM_KEYDOWN) для обработки.
Тип HOOKPROC определяет указатель на эту функцию повторного вызова. KeyboardProc - это имя - заместитель для определяемого программой или определяемого библиотекой имени функции.
Синтаксис
LRESULT CALLBACK KeyboardProc( int code, WPARAM wParam, LPARAM lParam ); |
Параметры
code
[in] Устанавливает код использования процедуры фильтра (hook), чтобы решить, как обработать сообщение. Если code - меньше чем нуль, процедура фильтра (hook) должна передать сообщение в функцию CallNextHookEx без дальнейшей обработки и должна возвратить значение, возвращенное CallNextHookEx. Этим параметром может быть одно из ниже перечисленных значений.
Значение | Предназначение |
HC_ACTION | Параметры wParam и lParam содержат информацию о сообщении нажатия клавиши. |
HC_NOREMOVE | Параметры wParam и lParam содержат информацию о сообщении нажатия клавиши и оно не было удалено из очереди сообщений. (Приложение вызвало функцию PeekMessage, определяя флажок PM_NOREMOVE.) |
wParam
[in] Устанавливает код виртуальной клавиши, которая генерировала сообщение нажатия клавиши.lParam
[in] Устанавливает счет повторов, код опроса клавиатуры(скэн-код), флажок дополнительной клавиши, контекстный код, флажок предыдущего состояния клавиши и флажок переходного состояния. Дополнительную информацию о параметре lParam, см. в статье Флажки сообщения о нажатии клавиши. Этот параметр может состоять из одного или нескольких ниже перечисленных значений.
Значение | Предназначение |
0-15 | Устанавливает счет повторов. Значение - количество раз, повторных нажатий клавиши в результате удержания нажатой клавиши пользователем. |
16-23 | Устанавливает код опроса клавиатуры(скэн-код). Значение зависит от изготовителя комплектного оборудования (OEM). |
24 | Устанавливает, является ли клавиша дополнительной клавишей, типа функциональной клавиши, или клавишей на числовой вспомогательной клавиатуре. Значение - 1, если клавиша - дополнительная; в противном случае, это - 0. |
25-28 | Зарезервировано. |
29 | Устанавливает контекстный код. Значение - 1, если клавиша ALT находится в нажатом состоянии; в противном случае, это - 0. |
30 | Устанавливает предыдущее состояние клавиши. Значение - 1, если клавиша находится в нажатом состоянии прежде, чем отправляется сообщение ; оно - 0, если клавиша находится в отпущенном состоянии. |
31 | Устанавливает состояние перехода. Значение - 0, если клавиша в процессе нажатия и 1- если она в процессе отпускания. |
Возвращаемое значение
Если code - меньше чем нуль, процедура фильтра (hook) должна возвратить значение, возвращенное функцией CallNextHookEx.
Если code больше или равен нулю, а процедура фильтра (hook) не обрабатывала сообщение, очень рекомендуется, чтобы Вы вызвали CallNextHookEx и возвратили значение, которое она возвращает; в противном случае, другие приложения, которые установили фильтр WH_KEYBOARD не будут получать уведомления фильтра (hook) и, в результате, могут повести себя неправильно. Если процедура фильтра (hook) обрабатывала сообщение, она может возвратить ненулевое значение, которое воспрепятствует системе передать сообщение в остальную часть цепочки фильтра (hook) или в целевую оконную процедуру.
Замечания
Приложение устанавливает процедуру фильтра (hook), определяя тип фильтра как WH_KEYBOARD и указатель на эту процедуру при вызове функции SetWindowsHookEx.
Смотри также
Обзор Фильтр-процедуры (hooks) событий, Функции, используемые фильтрами (hook), CallNextHookEx, GetMessage, PeekMessage, SetWindowsHookEx, WM_KEYUP, WM_KEYDOWN
Размещение и совместимость KeyboardProc |
|
Windows. NET Server |
Да |
Windows XP |
Да |
Windows 2000 |
Да |
Windows NT |
Да версии 3.1 и выше |
Windows Me |
Да |
Windows 98 |
Да |
Windows 95 |
Да |
Используемая библиотека |
Нет |
Заголовочный файл |
|
- объявлено в |
Winuser.h |
- включено в |
Windows.h |
Unicode |
Нет |
Замечания по платформе |
Не имеется |