Вызов функции SetWindowsHookEx устанавливает (регистрирует) ловушку и возвращает ее дескриптор. Удаление ранее зарегистрированной ловушки производится функцией UnhookWindowsHookEx. В нее передается единственный аргумент - дескриптор функции ловушки, возвращенный ранее функцией SetWindowsHookEx.

Заголовок всех функций ловушек имеет одинаковую структуру:

function имя(code: integer; wParam: integer; lParam: integer):

integer stdcall;

Но смысл и возможные значения параметров code, wParam и lParam зависят от вида функции.

Если надо предотвратить передачу перехваченного сообщения по дальнейшей цепочке, функция ловушки должна вернуть ненулевое значение. Если функция вернет нуль, сообщение будет передано дальше.

В некоторых случаях требуется, чтобы функция ловушки вызвала функцию CallNextHookEx и вернула возвращенное ею значение. Функция CallNextHookEx передает сообщение следующей ловушке в цепочке и возвращает значение, которое вернула последняя ловушка цепочки. Функция CallNextHookEx, объявлена следующим образом:

function CallNextHookEx(hhk: ННООК;
nCode: Integer;
wParam: WPARAM;
lParam: LPARAM): LRESULT;
stdcall;

Здесь hhk - дескриптор данной ловушки, a nCode, wParam и lParam - значения параметров, поступившие в функцию ловушки. Так что чаще всего возврат из функции ловушки оформляется оператором:

Result := CallNextHookEx(HookHandle, Code, wParam, lParam);

где HookHandle - дескриптор, возвращенный при установке ловушки функцией SetWindowsHookEx.

Рассмотрим теперь одну из функций ловушек - KeyboardProc. Эта функция, как было указано в описании параметра idHook, обеспечивает перехват событий клавиатуры. В ней параметр code указывает способ обработки поступившего сообщения. Если этот параметр неотрицательный, он может принимать следующие значения:

НС_АСТ1(Ж

В этом случае параметры wPaгam и 1Рагат содержат сооб-

щение о нажатой клавише.

НС_г40КЕМОУЕ

В этом случае параметры wPaгam и 1Рагат также содержат

сообщение о нажатой клавише, причем его нельзя удалять

из системной очереди сообщений.

Если значение code меньше нуля, функция не должна обрабатывать сообщение и должна вернуть значение, возвращенное функцией CallNextHookEx.

Глава 12

Параметр луРагат является виртуальным кодом, генерируемым сообщением нажатой клавиши. Параметр 1Рагаш дает дополнительную информацию. Биты значения этого параметра описывают:

0-15

Дают число повторений, вызванных тем, что пользователь удерживал

клавишу нажатой.

16-23

Определяют scan-код (см. разд. 12.2.3).

Значение 1 указывает на то, что это клавиша расширенной клавиату-

ры (функциональная или клавиша дополнительной цифровой клавиа-

туры).

25-28

Пока не используются.

Значение 1 указывает на то, что нажата клавиша Alt.

Указывает состояние клавиши перед отправкой сообщения: 1 - нажа-

та, 0 - отпущена.

Указывает, в какое состояние переходит клавиша: 0 - нажимается,

1 - освобождается.

Теперь рассмотрим функцию MouseProc, представляющую собой ловушку для событий мыши. В ней параметр code полностью аналогичен параметру предыдущей функции. Параметр wParam содержит идентификатор сообщения мыши (WM_MOU-SEMOVE, WM_LBUTTONUP, WM_RBUTTONUP и т.п. - см. разд. 12.3.1). А параметр lParam является указателем на запись типа MOUSEHOOKSTRUCT. Имеется тип указателей на подобные записи - PMouseHookStruct. Запись типа MOUSEHOOKSTRUCT содержит следующие поля:


⇐ Предыдущая страница| |Следующая страница ⇒

Приемы программирования в Delphi на основе VCL



Новости за месяц

  • Май
    2020
  • Пн
  • Вт
  • Ср
  • Чт
  • Пт
  • Сб
  • Вс