Чтение онлайн

ЖАНРЫ

Программирование на Visual C++. Архив рассылки

Jenter Алекс

Шрифт:

В параметре wParam содержится хэндл создаваемого окна. В lParam – указатель на следующую структуру.

/*

 * данные для HCBT_CREATEWND, на которые указывает lParam

 */

struct CBT_CREATEWND {

 struct tagCREATESTRUCT *lpcs; // Данные для создания

 // нового окна.

 HWND hwndInsertAfter; // Хэндл окна, после которого будет

 // добавлено это окно (Z-order).

} CBT_CREATEWND, *LPCBT_CREATEWND;

Функция-фильтр может изменить значение hwndInsertAfter

или значения в lpcs.

HCBT_DESTROYWND

Windows вызывает хук WH_CBT с этим кодом перед уничтожением какого-либо окна. Если хук является локальным, это окно должно принадлежать потоку, на который установлен хук. Windows вызывает хук WH_CBT до посылки сообщения WM_DESTROY. Если функция-фильтр вернет TRUE, окно не будет уничтожено.

Параметр wParam содержит хэндл уничтожаемого окна. В lParam находится 0L.

HCBT_MINMAX

Windows вызывает хук WH_CBT с этим кодом перед минимизацией или максимизацией окна. Когда хук установлен как локальный, это окно должно принадлежать потоку, на который установлен хук. Если фильтр вернет TRUE, действие будет отменено.

В wParam передается хэндл окна, которое готовится к максимизации/минимизации. lParam содержит одну из SW_*-констант, определенных в WINUSER.H и описывающих операцию над окном.

HCBT_MOVESIZE

Windows вызывает хук WH_CBT с этим кодом перед перемещением или изменением размеров окна, сразу после того, как пользователь закончил выбор новой позиции или размеров окна. Если хук установлен как локальный, это окно должно принадлежать потоку, на который установлен хук. Если фильтр вернет TRUE, действие будет отменено.

В wParam передается хэндл перемещаемогоизменяемого окна. lParam содержит LPRECT, который указывает на новые координаты окна.

HCBT_SYSCOMMAND

Windows вызывает хук WH_CBT с этим кодом во время обработки системной команды. Если хук установлен как локальный, окно, чье системное меню вызвало данное событие, должно принадлежать потоку, на который установлен хук. Хук WH_CBT вызывается из функции DefWindowsProc. Если приложение не передает сообщение WH_SYSCOMMAND функции DefWindowsProc, это хук не получит управление. Если функция-фильтр вернет TRUE, системная команда не будет выполнена.

В wParam содержится системная команда (SC_TASKLIST, SC_HOTKEY, и так далее), готовая к выполнению. Если в wParam передается SC_HOTKEY, в младшем слове (LOWORD) lParam содержится хэндл окна, к которому относится горячая клавиша. Если в wParam передается любое другое значение и если команда системного меню была выбрана мышью, в младшем слове lParam будет находиться горизонтальная позиция, а в старшем слове (HIWORD) – вертикальная позиция указателя мыши.

Следующие системные команды приводят к срабатыванию этого хука изнутри DefWindowProc:

SC_CLOSE Закрыть окно.
SC_HOTKEY Активировать окно, связанное с определенной горячей клавишей.
SC_HSCROLL Горизонтальная прокрутка.
SC_KEYMENU Выполнить команду меню по комбинации клавиш.
SC_MAXIMIZE Распахнуть окно.
SC_MINIMIZE Минимизировать окно.
SC_MOUSEMENU Выполнить команду меню по щелчку мыши.
SC_MOVE Переместить окно.
SC_NEXTWINDOW Перейти
к следующему окну.
SC_PREVWINDOW Перейти к предыдущему окну.
SC_RESTORE Сохранить предыдущие координаты (контрольная точка – checkpoint).
SC_SCREENSAVE Запустить хранитель экрана.
SC_SIZE Изменить размер окна.
SC_TASKLIST Запустить или активировать Планировщик Задач (Windows Task Manager).
SC_VSCROLL Вертикальная прокрутка.
HCBT_CLICKSKIPPED

Windows вызывает хук WH_CBT с этим кодом при удалении события от мыши из входной очереди потока, в случае, если установлен хук мыши. Windows вызовет системный хук, когда из какой-либо входной очереди будет удалено событие от мыши и в системе установлен либо глобальный, либо локальный хук мыши. Данный код передается только в том случае, если к хуку WH_MOUSE прикреплена фильтрующая функция. Несмотря на свое название, HCBT_CLICKSKIPPED генерируется не только для пропущенных событий от мыши, но и в случае, когда событие от мыши удаляется из системной очереди. Его главное назначение — установить хук WH_JOURNALPLAYBACK в ответ на событие мыши. (За дополнительной информацией обратитесь к секции "WM_QUEUESYNC".)

В wParam передается идентификатор сообщения мыши – например, WM_LBUTTONDOWN или любое из сообщений WM_?BUTTON*. lParam содержит указатель на структуру MOUSEHOOKSTRUCT, которая описана следующим образом:

typedef struct tagMOUSEHOOKSTRUCT {

 POINT pt; // Позиция курсора мыши в координатах экрана

 HWND hwnd; // Окно, получающее сообщение

 UINT wHitTestCode; // Результат проверки координат (hit-testing)

 DWORD dwExtraInfo; // Доп.информация о сообщении

} MOUSEHOOKSTRUCT, FAR *LPMOUSEHOOKSTRUCT, *PMOUSEHOOKSTRUCT;

HCBT_KEYSKIPPED

Windows вызывает хук WH_CBT с этим кодом при удалении клавиатурного события из системной очереди, в случае, если установлен клавиатурный хук. Windows вызовет системный хук, когда из какой-либо входной очереди будет удалено событие от клавиатуры и в системе установлен либо глобальный, либо локальный клавиатурный хук. Данный код передается только в том случае, если к хуку WH_KEYBOARD прикреплена фильтрующая функция. Несмотря на свое название, HCBT_KEYSKIPPED генерируется не только для пропущенных клавиатурных событий, но и в случае, когда клавиатурное событие удаляется из системной очереди. Его главное назначение — установить хук WH_JOURNALPLAYBACK в ответ на клавиатурное событие. (За дополнительной информацией обратитесь к секции "WM_QUEUESYNC".)

В wParam передается виртуальный код клавиши — то же самое значение, что и в wParam функций GetMessage или PeekMessage для сообщений WM_KEY*. lParam содержит то же значение, что и lParam функций GetMessage или PeekMessage для сообщений WM_KEY*.

WM_QUEUESYNC

Часто приложение интерактивного обучения (Computer Based Training application или CBT-приложение) должно реагировать на события в процессе, для которого оно разработано. Обычно такими событиями являются события от клавиатуры или мыши. К примеру, пользователь нажимает на кнопку OK в диалоговом окне, после чего CBT-приложение желает послать главному приложению серию клавиатурных нажатий. CBT-приложение может использовать хук мыши для определения момента нажатия кнопки OK. После этого, CBT-приложение должно выждать некоторое время, пока главное приложение не закончит обработку нажатия кнопки OK (CBT-приложение вряд ли хочет послать клавиатурные нажатия диалоговому окну).

Поделиться с друзьями: