Функция 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, CreateWindowSetWindowsHookEx, 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

Нет

Замечания по платформе

Не имеется

 

Назад в оглавление
На главную страницу
На оглавление справки

Hosted by uCoz