Страница 8 из 34
Функция CBTProc (ПроцедураМашиннойПодготовки) Подключаемая процедура CBTProc - это определяемая программой или определенная библиотекой функция повторного вызова, которую вызывает система перед активизацией, созданием, разрушением, уменьшением, увеличением, перемещением, или установлением размеров окна; перед завершением системной команды; перед удалением события мыши или клавиатуры из системной очереди сообщений; перед установкой фокуса клавиатуры; или перед синхронизацией системной очереди сообщений. Значение, возвращаемое подключаемой процедурой, определяет, разрешит или запретит операционная система Windows одно из этих действий. Прикладная программа машинной подготовки (computer-based training) (CBT) использует эту фильтр - процедуру, чтобы принять полезные уведомления от системы. Синтаксис LRESULT CALLBACK CBTProc ( int nCode,// код hook-точки WPARAM wParam,// зависит от кода hook-точки LPARAM lParam// зависит от кода hook-точки );
Параметры nCode Определяет код, который подключаемая процедура использует, чтобы установить, как обрабатывать сообщение. Этот параметр может быть одним из следующих значений: - HCBT_ACTIVATE - Система собирается активизировать окно
- HCBT_CLICKSKIPPED - Система удаляет сообщение мыши из системной очереди сообщений. После приема этого кода hook-точки, CBT приложение должно установить подключаемую процедуру WH_JOURNALPLAYBACK в ответ на сообщение мыши.
- HCBT_CREATEWND - Окно готовится быть созданным. Система вызывает подключаемую процедуру перед отправкой сообщения WM_CREATE или WM_NCCREATE окну. Если фильтр - процедура возвращает значение, отличающееся от нуля, система разрушает окно; функция CreateWindow возвращает значение NULL (ПУСТО), но сообщение WM_DESTROY не отправляется окну. Если подключаемая процедура возвращает значение ноль, окно создается как обычно.Окно было создано во время уведомления HCBT_CREATEWND, но его конечный размер и позицию не возможно было определить, а его родительское окно не возможно было установить. Система имеет возможность оправить сообщения недавно созданному окну, несмотря на то, что оно еще не приняло сообщения WM_CREATE или WM_NCCREATE. Она имеет также возможность изменить и позицию недавно созданного окна в Z-последовательности, изменяя член hwndInsertAfter структуры CBT_CREATEWND.
- HCBT_DESTROYWND - Окно собирается быть разрушенным.
- HCBT_KEYSKIPPED - Система удалила сообщение клавиатуры из системной очереди сообщений. После приема этого кода hook-точки, прикладная программа CBT должна установить подключаемую процедуру WH_JOURNALPLAYBACK в ответ на сообщение клавиатуры.
- HCBT_MINMAX - Окно намеревается быть свернутым или развернутым.
- HCBT_MOVESIZE - Окно намеревается быть перемещенным или изменить свои размеры.
- HCBT_QS - Система извлекла сообщение WM_QUEUESYNC из системной очереди сообщений.
- HCBT_SETFOCUS - Окно собирается принять фокус клавиатуры.
- HCBT_SYSCOMMAND - Системная команда собирается быть завершенной. Это позволяет прикладной программе CBT предотвратить переключение задач посредством комбинаций "горячих клавиш -"hot key".
Если nCode - меньше чем нуль, подключаемая процедура должна передать сообщение в функцию CallNextHookEx без дальнейшей обработки и должна возвратить значение, возвращенное CallNextHookEx. wParam Зависит от параметра nCode. За подробностями обратитесь в. следующий раздел Замечаний. lParam Зависит от параметра nCode. За подробностями обратитесь в. следующий раздел Замечаний. Возвращаемые значения Для действий, соответствующих ниже перечисленным кодам hook-точек CBT, величина возвращаемого значения должна быть 0, чтобы позволить операцию, или 1, чтобы запретит ее: HCBT_ACTIVATE HCBT_CREATEWND HCBT_DESTROYWND HCBT_MINMAX HCBT_MOVESIZE HCBT_SETFOCUS HCBT_SYSCOMMAND
Для операций, соответствующих ниже перечисленным кодам hook-точек CBT, величина возвращаемого значения игнорируется: HCBT_CLICKSKIPPED HCBT_KEYSKIPPED HCBT_QS
Замечания Подключаемая процедура не должна устанавливать фильтр - процедуру WH_JOURNALPLAYBACK кроме как в ситуациях, описанных в предшествующем перечне кодов hook-точек. Эта подключаемая процедура должна быть в динамически подключаемой библиотеке (DLL). Прикладная программа устанавливает фильтр - процедуру, определяя тип hook-точки WH_CBT и адрес подключаемой процедуры при вызове функции SetWindowsHookEx. Нижеследующая таблица описывает параметры wParam и lParam для каждого кода hook-точки HCBT_: Код | wParam | lParam | HCBT_ACTIVATE | Определяет дескриптор окна, собирающегося быть активизированным. | Определяет дальний указатель на структуру CBTACTIVATESTRUCT, содержащую дескриптор активного окна и определяет, не изменяется ли активность из-за щелчка мыши. | HCBT_CLICKSKIPPED | Идентифицирует сообщение мыши, удаленное из системной очереди сообщений. | Определяет дальний указатель на структуру MOUSEHOOKSTRUCT, содержащей код местоположения курсора и дескриптор окна, для которого предназначено сообщение мыши. Значение HCBT_CLICKSKIPPED отправляется подключаемой процедуре CBTProc только тогда, если установлена hook-точка WH_MOUSE. За перечнем кодов местоположения курсора, обратитесь к статье WM_NCHITTEST. | HCBT_CREATEWND | Определяет дескриптор нового окна. | Определяет дальний указатель на структуру CBT_CREATEWND, содержащую параметры инициализации для окна. Параметры включают в себя координаты и размеры окна. Изменяя эти параметры, подключаемая процедура CBTProc может установить начальный размер и позицию окна. | HCBT_DESTROYWND | Определяет дескриптор окна, собирающегося быть разрушенным. | Не определяется и должен быть установлен в нуль. | HCBT_KEYSKIPPED | Идентифицирует код виртуальной клавиши. | Определяет повторный счет, скэн-код, код клавиши перехода, предыдущее состояние клавиши и код контекста. Значение HCBT_KEYSKIPPED отправляется подключаемой процедуре CBTProc только тогда, если установлена hook-точка WH_KEYBOARD. Для получения дополнительной информации, см. сообщение WM_KEYDOWN или WM_KEYUP. | HCBT_MINMAX | Определяет дескриптор свертываемого или развертываемого окна. | Определяет младшее слово значения показа окна (SW _), определенное операцией. Для получения списка значений показа окна, см. ShowWindow. Старшее слово не определяется. | HCBT_MOVESIZE | Определяет дескриптор окна, которое будет перемещено или установлено с другими размерами. | Определяет дальний указатель на структуру RECT, содержащую координаты окна. Изменяя значения в структуре, подключаемая процедура CBTProc может устанавливать конечные координаты окна. | HCBT_QS | Не определяется и должен быть установлен в нуль. | Не определяется и должен быть установлен в нуль. | HCBT_SETFOCUS | Определяет дескриптор окна, получающего фокус клавиатуры. | Определяет дескриптор окна, теряющего фокус клавиатуры. | HCBT_SYSCOMMAND | Определяет значение системной команды (SC_), которое устанавливается командой системы. Для получения дополнительной информации о значениях системных команд, см. WM_SYSCOMMAND. | lСодержит те же самые данные что и значение lParam сообщения WM_SYSCOMMAND: Если команда системного меню выбрана мышью, младшее слово содержит x-координату курсора, в экранных координатах, а старшее слово содержит y-координату; иначе, параметр не используется. | CBTProc - метка - заместитель для определяемого программой или определенного библиотекой имени функции. Смотри также CallNextHookEx, CreateWindow, SetWindowsHookEx, WM_SYSCOMMAND Размещение и совместимость CBTProc Windows NTДа Win95Да Win32sДа Импортируемая библиотекаОпределенная пользователем Заголовочный файлwinuser.h UnicodeНет Замечания по платформеHOOKPROC |