Функция 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), CallNextHookExCallWndProcCallWndRetProcCBTProcDebugProcForegroundIdleProcGetMsgProcJournalPlaybackProcJournalRecordProcLowLevelKeyboardProcLowLevelMouseProcKeyboardProcMouseProcMessageProcShellProcSysMsgProcUnhookWindowsHookEx

Размещение и совместимость 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

Нет

Замечания по платформе

Не имеется

 

Назад в оглавление
На главную страницу
На оглавление справки

Hosted by uCoz