Win32 API. Hooks (хуки) - Функция CBTProc

ОГЛАВЛЕНИЕ

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