Функция CBTProc
Процедура
фильтра (hook) CBTProc - это определяемая программой или
определяемая библиотекой функция
повторного вызова, используемая функцией SetWindowsHookEx. Система вызывает эту функцию
перед активизацией, созданием, разрушением,
уменьшением, увеличением, перемещением или
установкой размеров окна; перед
завершением системной команды; перед
удалением события мыши или клавиатуры из
системной очереди сообщений; перед
настройкой фокуса клавиатуры; или перед
синхронизацией системной очереди
сообщений. Программы компьютерной
профессиональной подготовки (CBT)
используют
эту процедуру фильтра (hook), чтобы
получать полезные уведомления от системы.
Тип HOOKPROC определяет указатель на эту
функцию повторного вызова. CBTProc - имя -
заместитель для определяемого программой
или определяемого библиотекой имени
функции.
Синтаксис
LRESULT CALLBACK CBTProc( int nCode, WPARAM wParam, LPARAM lParam ); |
Параметры
nCode
[in] Устанавливает код, который процедура фильтра (hook) использует, чтобы решить, как обработать сообщение. Если nCode - меньше чем нуль, процедура фильтра (hook) должна передать сообщение в функцию CallNextHookEx без дальнейшей обработки и должна возвратить значение, возвращенное CallNextHookEx. Этим параметром может быть одно из ниже перечисленных значений.
Значение | Предназначение |
HCBT_ACTIVATE | Система собирается активизировать окно. |
HCBT_CLICKSKIPPED | Система удалила сообщение мыши из системной очереди сообщений. После получения этого кода фильтра (hook) событий, CBT- приложение должно установить процедуру фильтра (hook) WH_JOURNALPLAYBACK в ответ на сообщение мыши. |
HCBT_CREATEWND | Окно собирается
создаваться. Система вызывает процедуру фильтра
(hook) перед отправкой в
окно сообщения WM_CREATE или WM_NCCREATE. Если
процедура фильтра
(hook) возвращает
ненулевое значение, система уничтожает
окно; функция CreateWindow возвращает
значение ПУСТО (NULL), но сообщение
WM_DESTROY не отправляется в окно. Если процедура фильтра
(hook) возвращает
значение нуль, окно создается как обычно.
Во время уведомления HCBT_CREATEWND, окно создалось, но его конечный размер и позиция, возможно, не были определены, а его родительское окно, возможно, не было установлено. Становиться возможным отправлять сообщения в недавно созданное окно, хотя оно еще не получило сообщения WM_NCCREATE или WM_CREATE. Также можно изменить позицию недавно созданного окна в Z-последоватедльности, изменяя член hwndInsertAfter структуры CBT_CREATEWND. |
HCBT_DESTROYWND | Окно собирается разрушаться. |
HCBT_KEYSKIPPED | Система удалила сообщение клавиатуры из системной очереди сообщений. После получения этого кода фильтра (hook) событий, CBT- приложение должно установить процедуру фильтра (hook) WH_JOURNALPLAYBACK в ответ на сообщение клавиатуры. |
HCBT_MINMAX | Окно собирается быть свернутым или развернутым. |
HCBT_MOVESIZE | Окно собирается перемещаться или изменить размер. |
HCBT_QS | Система извлекла сообщение WM_QUEUESYNC из системной очереди сообщений. |
HCBT_SETFOCUS | Окно собирается получить фокус клавиатуры. |
HCBT_SYSCOMMAND | Системная команда собирается быть выполненной. Это дает возможность CBT программе воспрепятствовать переключению задач посредством "горячих" клавиш. |
wParam
[in] Зависит от параметра nCode. Детали, см. ниже в разделе Замечаний.lParam
[in] Зависит от параметра nCode. Детали, см. ниже в разделе Замечаний.Возвращаемое значение
Значение, возвращенное процедурой фильтра (hook) выясняет, система позволяет, или препятствует одной из этих операций. Для операций, соответствующих ниже перечисленным кодам CBT фильтра (hook), возвращаемое значение должно быть 0, чтобы разрешить операцию, или 1, чтобы воспрепятствовать ей:
HCBT_ACTIVATE
HCBT_CREATEWND
HCBT_DESTROYWND/
HCBT_MINMAX
HCBT_MOVESIZE
HCBT_SETFOCUS
HCBT_SYSCOMMAND
Для операций, соответствующих ниже перечисленным CBT кодам фильтра (hook), возвращаемое значение игнорируется:
HCBT_CLICKSKIPPED
HCBT_KEYSKIPPED
HCBT_QS
Замечания
Процедура фильтра (hook) не должна устанавливать процедуру фильтра WH_JOURNALPLAYBACK, кроме тех случаев, которые описаны в данном выше перечне кодов фильтров (hook) событий.
Эта процедура фильтра (hook) должна находиться в динамически подключаемой библиотеке (DLL). Приложение устанавливает процедуру фильтра (hook), определяя тип фильтра (hook) как WH_CBT, и указатель на процедуру фильтра (hook) при вызове функции SetWindowsHookEx.
Таблица ниже описывает параметры wParam и lParam каждого кода фильтра (hook) HCBT_ .
Значение | wParam | lParam |
---|---|---|
HCBT_ACTIVATE | Устанавливает дескриптор окна, которое собирается стать активным. | Устанавливает дальний указатель на структуру CBTACTIVATESTRUCT, содержащую дескриптор активного окна и задает, изменяется ли активизация из-за щелчка мыши. |
HCBT_CLICKSKIPPED | Устанавливает сообщение мыши, удаленное из системной очереди сообщений. | Устанавливает
дальний указатель на структуру MOUSEHOOKSTRUCT, содержащую код
местоположения курсора и дескриптор
окна, для которого предназначаются
сообщения мыши.
Значение HCBT_CLICKSKIPPED отправляется в процедуру фильтра (hook) CBTProc, только в том случае, если определяется фильтр (hook) событий WH_MOUSE. Список кодов местоположения курсора, см. в описании WM_NCHITTEST. |
HCBT_CREATEWND | Устанавливает дескриптор нового окна. | Устанавливает дальний указатель на структуру CBT_CREATEWND, содержащую параметры инициализации для окна. Параметры включают в себя координаты и размеры окна. Изменяя эти параметры, процедура фильтра (hook) CBTProc может установить начальный размер и позицию окна. |
HCBT_DESTROYWND | Устанавливает, что дескриптор окна, собирается разрушаться. | Является неопределенным и должен быть установлен в нуль. |
HCBT_KEYSKIPPED | Устанавливает код виртуальной клавиши. | Устанавливает повторный счет, код опроса клавиатуры, код переходного состояния клавиши, предыдущее состояние клавиши и контекстный код. Значение HCBT_KEYSKIPPED отправляется в процедуру фильтра (hook) CBTProc, только в том случае, если устанавливается фильтр (hook) WH_KEYBOARD. Дополнительную информацию, см. в описании WM_KEYUP или WM_KEYDOWN. |
HCBT_MINMAX | Устанавливает дескриптор свертываемого или развертываемого окна. | Устанавливает в младшем слове значения показа окна (SW_) определяющее операцию. Список значений показа окна, см. в описании ShowWindow. Старшее слово - не определяется. |
HCBT_MOVESIZE | Устанавливает дескриптор окна, которое должно переместиться или изменить размер. | Устанавливает дальний указатель на структуру RECT, содержащую координаты окна. Изменяя значения в структуре, CBTProc процедура фильтра (hook) может установить конечные координаты окна. |
HCBT_QS | Не определяется и должен быть нуль. | Не определяется и должен быть нуль. |
HCBT_SETFOCUS | Устанавливает дескриптор окна, которое получает фокус клавиатуры. | Устанавливает дескриптор окна, теряющего фокус клавиатуры. |
HCBT_SYSCOMMAND | Устанавливает значение системной команды (SC _) определяющее системную команду. Дополнительную информацию о значениях системных команд, см. описание WM_SYSCOMMAND. | Содержит такие же данные, что и значение lParam сообщения WM_SYSCOMMAND: если команда системного меню выбирается мышью, младшее слово содержит x-координату курсора, в экранных координатах, а старшее слово содержит y-координату; в противном случае, параметр не используется. |
Информацию, см. в главе Механизм WinEvents.
Смотри также
Обзор Фильтр-процедуры (hooks) событий, Функции, используемые фильтрами (hook), CallNextHookEx, CreateWindow, SetWindowsHookEx, WM_SYSCOMMAND
Размещение и совместимость CBTProc |
|
Windows. NET Server |
Да |
Windows XP |
Да |
Windows 2000 |
Да |
Windows NT |
Да версии 3.1 и выше |
Windows Me |
Да |
Windows 98 |
Да |
Windows 95 |
Да |
Используемая библиотека |
Нет |
Заголовочный файл |
|
- объявлено в |
Winuser.h |
- включено в |
Windows.h |
Unicode |
Нет |
Замечания по платформе |
Не имеется |