Фильтры (HOOKS)
Фильтры (HOOKS).
Мы рассмотрим весьма действенное средство, чаще всего используемое для отладки программ. Средство это называют фильтрами или ловушками52. Смысл его заключается в том, что Вы при желании можете отслеживать сообщения как в рамках одного приложения, так и в рамках целой системы. В этой связи фильтры делят на глобальные (в рамках всей системы) и локальные (в рамках данного процесса). Работая с фильтрами, надо иметь в виду, что они могут существенным образом затормозить работу всей системы. Особенно это касается глобальных фильтров. С точки зрения программирования мы просто определяем функцию, которая вызывается системой при возникновении некоторого события. Можно также говорить о сообщении, приходящем на функцию фильтра.
Рассмотрим некоторые средства для работы с фильтрами. Ниже перечислены основные типы фильтров или сообщения.
WH_CALLWNDPROC - фильтр срабатывает, когда вызывается функция SendMessage. WH_CALLWNDPROCRET - фильтр срабатывает, когда функция SendMessage возвращает управление. WH_CBT - сообщение приходит, когда что-то происходит с окном. WH_DEBUG - данное сообщение посылается перед тем, как послать сообщение какому-либо другому фильтру. WH_GETMESSAGE - данный фильтр срабатывает, когда функция GetMessage принимает какое-либо сообщение из очереди. WH_JOURNALRECORD - данное сообщение приходит на процедуру фильтра, когда система удаляет из очереди какое-либо сообщение. WH_JOURNALPLAYBACK - вызывается за предыдущим вызовом (WH_JOURNALRECORD). WH_KEYBOARD - сообщение приходит, когда происходят клавиатурные события. WH_MOUSE - аналогично предыдущему, но относится к событиям с мышью. WH_MSGFILTER - вызывается в случае событий ввода, которые произошли с диалоговым окном, меню, полосой прокрутки, но до того, как эти события были обработаны в пределах данного процесса. WH_SHELL - данный фильтр срабатывает, когда что-то происходит с Windows-оболочкой. WH_SYSMSGFILTER - аналогично сообщению WH_MSGFILTER, но относится ко всей системе.
Фильтр устанавливается при помощи функции SetWindowsHookEx. Рассмотрим параметры этой функции.
Содержание Назад Вперед