Функция обратного вызова CBTProc
Определяемая приложением или библиотекой функция обратного вызова, используемая с функцией SetWindowsHookExA/SetWindowsHookExW . Система вызывает эту функцию перед активацией, созданием, уничтожением, минимизацией, максимизированием, перемещением или изменением размера окна; перед выполнением системной команды; перед удалением события мыши или клавиатуры из очереди системных сообщений; перед установкой фокуса клавиатуры; или перед синхронизацией с очередью системных сообщений. Приложение для компьютерного обучения (CBT) использует эту процедуру перехватчика для получения полезных уведомлений от системы.
Синтаксис
LRESULT CALLBACK CBTProc(
_In_ int nCode,
_In_ WPARAM wParam,
_In_ LPARAM lParam
);
Параметры
nCode [in]
Тип: intКод, который используется процедурой перехватчика для определения способа обработки сообщения. Если значение nCode меньше нуля, процедура перехватчика должна передать сообщение функции CallNextHookEx без дальнейшей обработки и возвратить значение, возвращаемое CallNextHookEx. Этот параметр может принимать одно из указанных ниже значений.
Значение Значение HCBT_ACTIVATE 5 Система вот-вот активирует окно.
HCBT_CLICKSKIPPED 6 Система удалила сообщение мыши из очереди системных сообщений. Получив этот код перехватчика, приложение CBT должно установить WH_JOURNALPLAYBACK процедуру перехватчика в ответ на сообщение мыши.
HCBT_CREATEWND 3 Окно будет создано. Система вызывает процедуру перехватчика перед отправкой WM_CREATE или WM_NCCREATE сообщения в окно. Если процедура перехватчика возвращает ненулевое значение, система уничтожает окно; Функция CreateWindow возвращает значение NULL, но WM_DESTROY сообщение не отправляется в окно. Если процедура перехватчика возвращает ноль, окно создается в обычном режиме.
На момент уведомления HCBT_CREATEWND окно было создано, но его окончательный размер и положение, возможно, не были определены, а его родительское окно не было установлено. Можно отправлять сообщения в созданное окно, хотя оно еще не получило WM_NCCREATE или WM_CREATE сообщений. Также можно изменить положение в z-порядке созданного окна, изменив элемент hwndInsertAfterструктуры CBT_CREATEWND .
HCBT_DESTROYWND 4 Окно вот-вот будет разрушено.
HCBT_KEYSKIPPED 7 Система удалила сообщение с клавиатуры из очереди системных сообщений. Получив этот код перехватчика, приложение CBT должно установить WH_JOURNALPLAYBACK процедуру перехватчика в ответ на сообщение клавиатуры.
HCBT_MINMAX 1 Окно должно быть свернуто или развернуто.
HCBT_MOVESIZE 0 Окно должно быть перемещено или по размеру.
HCBT_QS 2 Система получила WM_QUEUESYNC сообщение из очереди системных сообщений.
HCBT_SETFOCUS 9 Окно вот-вот получит фокус клавиатуры.
HCBT_SYSCOMMAND 8 Вот-вот будет выполнена системная команда. Это позволяет приложению CBT предотвращать переключение задач с помощью горячих клавиш.
wParam [in]
Тип: WPARAMЗависит от параметра nCode . Дополнительные сведения см. в следующем разделе Примечаний.
lParam [in]
Тип: LPARAMЗависит от параметра nCode . Дополнительные сведения см. в следующем разделе Примечаний.
Возвращаемое значение
Тип:****
Тип: LRESULT
Значение, возвращаемое процедурой перехватчика, определяет, разрешает ли система или запрещает одну из этих операций. Для операций, соответствующих следующим кодам перехватчика CBT, возвращаемое значение должно быть равно 0, чтобы разрешить операцию, или 1, чтобы предотвратить ее.
- HCBT_ACTIVATE
- HCBT_CREATEWND
- HCBT_DESTROYWND
- HCBT_MINMAX
- HCBT_MOVESIZE
- HCBT_SETFOCUS
- HCBT_SYSCOMMAND
Для операций, соответствующих следующим кодам перехватчика CBT, возвращаемое значение игнорируется.
- HCBT_CLICKSKIPPED
- HCBT_KEYSKIPPED
- HCBT_QS
Комментарии
Тип HOOKPROC определяет указатель на эту функцию обратного вызова. CBTProc — это заполнитель для имени определяемой приложением или библиотекой функции.
Процедура перехватчика не должна устанавливать WH_JOURNALPLAYBACK процедуру перехватчика, за исключением ситуаций, описанных в предыдущем списке кодов перехватчиков.
Приложение устанавливает процедуру перехватчика, указывая тип перехватчика WH_CBT и указатель на процедуру перехватчика в вызове функции SetWindowsHookExA/SetWindowsHookExW .
В следующей таблице описаны параметры wParam и lParam для каждого кода перехватчика HCBT_ .
Значение wParam lParam HCBT_ACTIVATE Указывает дескриптор для окна, которое будет активировано. Указывает длинный указатель на структуру CBTACTIVATESTRUCT , содержащую дескриптор активного окна, и указывает, изменяется ли активация из-за щелчка мыши. HCBT_CLICKSKIPPED Указывает сообщение мыши, удаленное из очереди системных сообщений. Указывает длинный указатель на структуру MOUSEHOOKSTRUCT , содержащую код проверки попадания и дескриптор окна, для которого предназначено сообщение мыши. Значение HCBT_CLICKSKIPPED отправляется в процедуру перехватчика CBTProc , только если установлен обработчик WH_MOUSE . Список кодов проверки попадания см. в разделе WM_NCHITTEST.
HCBT_CREATEWND Указывает дескриптор для нового окна. Указывает длинный указатель на структуру CBT_CREATEWND , содержащую параметры инициализации для окна. Параметры включают координаты и размеры окна. Изменяя эти параметры, процедура перехватчика CBTProc может задать начальный размер и положение окна. HCBT_DESTROYWND Указывает дескриптор окна, которое будет уничтожено. Не определен и должен иметь нулевое значение. HCBT_KEYSKIPPED Указывает код виртуального ключа. Указывает число повторов, код сканирования, код перехода между ключами, предыдущее состояние ключа и код контекста. Значение HCBT_KEYSKIPPED отправляется в процедуру перехватчика CBTProc , только если установлен обработчик WH_KEYBOARD . Дополнительные сведения см. в разделе WM_KEYUP или WM_KEYDOWN. HCBT_MINMAX Указывает дескриптор свернутого или разворачиваемого окна. Задает в нижнем порядке значение окна отображения (SW_), указывающее операцию. Список значений окна отображения см. в разделе ShowWindow. Слово высокого порядка не определено. HCBT_MOVESIZE Указывает дескриптор для перемещаемого или размерного окна. Указывает длинный указатель на структуру RECT , содержащую координаты окна. Изменяя значения в структуре, процедура перехватчика CBTProc может задать окончательные координаты окна. HCBT_QS Не определено и должно быть равно нулю. Не определено и должно быть равно нулю. HCBT_SETFOCUS Указывает дескриптор для окна, получая фокус клавиатуры. Указывает дескриптор для окна, потеряв фокус клавиатуры. HCBT_SYSCOMMAND Задает значение system-command (SC_), указывающее системную команду. Дополнительные сведения о значениях системных команд см. в разделе WM_SYSCOMMAND. Содержит те же данные, что и значение lParamWM_SYSCOMMAND сообщении: если команда системного меню выбрана с помощью мыши, слово низкого порядка содержит координату X курсора в экранных координатах, а слово высокого порядка — координату Y; В противном случае параметр не используется. Дополнительные сведения см. в разделе События Windows.
Требования
Минимальная версия клиента
Windows 2000 Professional [только классические приложения]
Минимальная версия сервера
Windows 2000 Server [только классические приложения]
Заголовок
Winuser.h (включая Windows.h) См. также раздел