Функция SetWindowsHookEx
Функция SetWindowsHookEx устанавливает определяемую программой процедуру фильтра (hook) в цепочку фильтров (hook). Вы должны установить процедуру фильтра (hook) для того, чтобы контролировать в системе определенного рода типы событий. Эти события связаны или с конкретным потоком или со всеми потоками одного и того же рабочего стола, что и вызывающий поток.
Синтаксис
HHOOK SetWindowsHookEx( int idHook, HOOKPROC lpfn, HINSTANCE hMod, DWORD dwThreadId ); |
Параметры
idHook
[in] Определяет тип устанавливаемой процедуры фильтра (hook). Этим параметром может быть одно из ниже перечисленных значений.
Значение | Предназначение |
WH_CALLWNDPROC | Устанавливает процедуру фильтра (hook), которая осуществляет текущий контроль за сообщениями до того, как система отправляет их в целевую оконную процедуру. Дополнительную информацию, см. в описании процедуры фильтра (hook) CallWndProc. |
WH_CALLWNDPROCRET | Устанавливает процедуру фильтра (hook), которая осуществляет текущий контроль за сообщениями после того, как они были обработаны целевой оконной процедурой. Дополнительную информацию, см. в описании процедуры фильтра (hook) CallWndRetProc. |
WH_CBT | Устанавливает процедуру фильтра (hook), которая получает уведомления, полезные для прикладных программ компьютерной профессиональной подготовки (CBT). Дополнительную информацию, см. в описании процедуры фильтра (hook) CBTProc. |
WH_DEBUG | Устанавливает процедуру фильтра (hook), полезную для того, чтобы делать отладку других процедур фильтра. Дополнительную информацию, см. в описании процедуры фильтра (hook) DebugProc. |
WH_FOREGROUNDIDLE | Устанавливает процедуру фильтра (hook), которая должна вызываться тогда, когда высокоприоритетный поток приложения собирается стать бездействующим. Этот фильтр (hook) полезен для того, чтобы выполнить, низкие приоритетные задачи в течение этого времени простоя. Дополнительную информацию, см. в описании процедуры фильтра (hook) ForegroundIdleProc. |
WH_GETMESSAGE | Устанавливает процедуру фильтра (hook), которая осуществляет текущий контроль за сообщениями, помещенными в очередь сообщений. Дополнительную информацию, см. в описании процедуры фильтра (hook) GetMsgProc. |
WH_JOURNALPLAYBACK | Устанавливает процедуру фильтра (hook), которая посылает сообщения, предварительно зарегистрированные процедурой фильтра (hook) WH_JOURNALRECORD. Дополнительную информацию, см. в описании процедуры фильтра (hook) JournalPlaybackProc. |
WH_JOURNALRECORD | Устанавливает процедуру фильтра (hook), которая записывает сообщения о вводе данных, пересылаемые в системную очередь сообщений. Этот фильтр (hook) применяется для записи макроопределения. Дополнительную информацию, см. в описании процедуры фильтра (hook) JournalRecordProc. |
WH_KEYBOARD | Устанавливает процедуру фильтра (hook), которая осуществляет текущий контроль за сообщениями нажатия клавиш. Дополнительную информацию, см. в описании процедуры фильтра (hook) KeyboardProc. |
WH_KEYBOARD_LL | Windows NT/2000/XP: Устанавливает процедуру фильтра (hook), которая осуществляет текущий контроль за низкоуровневыми событиями ввода данных с клавиатуры. Дополнительную информацию, см. в описании процедуры фильтра (hook) LowLevelKeyboardProc. |
WH_MOUSE | Устанавливает процедуру фильтра (hook), которая осуществляет текущий контроль за сообщениями мыши. Дополнительную информацию, см. в описании процедуры фильтра (hook) MouseProc. |
WH_MOUSE_LL | Windows NT/2000/XP: Устанавливает процедуру фильтра (hook), которая осуществляет текущий контроль за низкоуровневыми событиями ввода данных от мыши. Дополнительную информацию, см. в описании процедуры фильтра (hook). LowLevelMouseProc. |
WH_MSGFILTER | Устанавливает процедуру фильтра (hook), которая осуществляет текущий контроль за сообщениями, генерируемыми в результате события ввода данных в диалоговом окне, окне сообщения, меню или на линейке прокрутки. Дополнительную информацию, см. в описании процедуры фильтра (hook) MessageProc. |
WH_SHELL | Устанавливает процедуру фильтра (hook), которая получает уведомления, полезные в приложениях оболочки. Дополнительную информацию, см в описании процедуры фильтра (hook) ShellProc. |
WH_SYSMSGFILTER | Устанавливает процедуру фильтра (hook), которая осуществляет текущий контроль за сообщениями, созданными в результате события ввода данных в диалоговом окне, окне сообщения, меню или на линейке прокрутки. Процедура фильтра (hook) осуществляет текущий контроль за этими сообщениями всех прикладных программ одного и того же рабочего стола, что и вызывающий поток. Дополнительную информацию, см. в описании процедуры фильтра (hook) SysMsgProc. |
lpfn
[in] Указатель на процедуру фильтра (hook). Если параметр dwThreadId равняется нулю или устанавливает идентификатор потока, созданного другим процессом, параметр lpfn должен указывать на процедуру фильтра (hook) в динамически подключаемой библиотеке (DLL). В противном случае, lpfn может указывать на процедуру фильтра (hook) в коде, связанном с текущим процессом.hMod
[in] Дескриптор DLL, содержащий процедуры фильтра (hook), на которую указывает параметр lpfn. параметр hMod должен быть установлен в ПУСТО (NULL), если параметр dwThreadId устанавливает поток, созданный текущим процессом, и если процедура фильтра (hook) находится внутри кода, связанного с текущим процессом.dwThreadId
[in] Устанавливает идентификатор потока с которым, процедура фильтра (hook) должна быть связана. Если этот параметр равняется нулю, процедура фильтра (hook) связывается со всеми существующими потоками, запущенными на том же самом рабочем столе, что и вызывающий поток.Возвращаемое значение
Если функция завершается успешно, возвращаемое значение - дескриптор процедуры фильтра (hook).
Если функция завершается ошибкой, возвращаемое значение - ПУСТО (NULL). Чтобы получить дополнительную информацию об ошибке, вызовите GetLastError.
Замечания
Ошибка может произойти, если параметр hMod - ПУСТО (NULL), а параметр dwThreadId равняется нулю или определяет идентификатор потока, созданного другим процессом.
Вызов функции CallNextHookEx следующей процедурой в цепочке фильтров (hook) является необязательным, но он очень рекомендуется; в противном случае, другие приложения, которые установили фильтры (hook), не будут получать уведомления фильтра и, в результате, могут повести себя неправильно. Вам следует вызвать функцию CallNextHookEx, если Вы совершенно не должны препятствовать, чтобы уведомления были замечены другими приложениями.
Перед завершением работы, приложение должно вызвать функцию UnhookWindowsHookEx, чтобы освободить системные ресурсы, связанные с фильтром (hook).
Область действия фильтра(ловушки) (hook) зависит от типа фильтра. Некоторые фильтры могут быть установлены только в основной области действия; другие могут также устанавливаться только для конкретного потока, как показано в следующей ниже таблице.
Фильтр (hook) Область действия WH_CALLWNDPROC Потока или основная WH_CALLWNDPROCRET Потока или основная WH_CBT Потока или основная WH_DEBUG Потока или основная WH_FOREGROUNDIDLE Потока или основная WH_GETMESSAGE Потока или основная WH_JOURNALPLAYBACK Только основная WH_JOURNALRECORD Только основная WH_KEYBOARD Потока или основная WH_KEYBOARD_LL Только основная WH_MOUSE Потока или основная WH_MOUSE_LL Только основная WH_MSGFILTER Потока или основная WH_SHELL Потока или основная WH_SYSMSGFILTER Только основная
Для определенных типов фильтра (hook), сначала вызывается фильтры потока, а затем глобальные фильтры (hook).
Глобальные фильтры (hook) - это совместно используемый ресурс и установка одного такого фильтра воздействует на на все прикладные программы одного и того же рабочего стола, что и вызывающий поток. Все функции глобального фильтра (hook) должны находиться в библиотеках. Глобальные фильтры (hook) должны быть ограничены в приложениях специального назначения или использоваться как вспомогательное средство разработке в ходе отладки приложения. Библиотеки, которые больше не нуждаются в фильтре (hook), должны удалять свою процедуру фильтра (hook).
Windows 95/98/Me: SetWindowsHookEx поддерживается подпрограммой Microsoft® Layer for Unicode (MSLU). Однако, преобразования не делаются. Чтобы увидеть Unicode сообщения, уведомления и т.д, Вы должны перехватывать и обрабатывать сообщения окна. Чтобы использовать эту версию прикладного программного интерфейса (API), Вы должны добавить некоторые файлы в ваше приложение, как изложено в статье Установка и удаление процедур фильтра (hook).
Пример
Пример, см. в статье Установка и удаление процедур фильтра (hook).
Смотри также
Обзор Фильтр-процедуры (hooks) событий, Функции, используемые фильтрами (hook), CallNextHookEx, CallWndProc, CallWndRetProc, CBTProc, DebugProc, ForegroundIdleProc, GetMsgProc, JournalPlaybackProc, JournalRecordProc, LowLevelKeyboardProc, LowLevelMouseProc, KeyboardProc, MouseProc, MessageProc, ShellProc, SysMsgProc, UnhookWindowsHookEx
Размещение и совместимость SetWindowsHookEx |
|
Windows. NET Server |
Да |
Windows XP |
Да |
Windows 2000 |
Да |
Windows NT |
Да версии 3.1 и выше |
Windows Me |
Да |
Windows 98 |
Да |
Windows 95 |
Да |
Используемая библиотека |
User32.lib |
Заголовочный файл |
|
- объявлено в |
Winuser.h |
- включено в |
Windows.h |
Unicode |
Нет |
Замечания по платформе |
Не имеется |