Содержание материала

Что такое НООК?

НООК - это механизм перехвата сообщений, предоставляемый системой Microsoft Windows. Программист пишет специального вида функцию (НООК-функция), которая затем при помощи функции SetWindowsHookEx вставляется на верх стека НООК-функций системы. Ваша НООК-функция сама решает, передать ли ей сообщение в следующую НООК-функцию при помощи CallNextHookEx или нет.

 

Какие бывает НООК'и?

НООК бывают глобальные, контролирующие всю систему, так и локальные, ориентированные на какой-либо поток (Thread). Кроме того НООК различаются по типу перехватываемых сообщений (подробнее об этом - ниже). НООК несколько подтормаживают систему, поэтому ставить их рекомендуется только при необходимости, и кактолько необходимость в них отпадает - удалять.

 

Как создавать НООК?

НООК устанавливается в систему при помощи функции SetWindowsHookEx, вот её заголовок:

 

function SetWindowsHookEx(idHook: Integer; lpfn: TFNHookProc; hmod: HINST; dwThreadId: DWORD): HHOOK;

 

idHook

константа, определяющая тип вставляемого НООК'а, должна быть одна из нижеследующих констант:

WH_CALLWNDPROC

вставляемая НООК-функция следит за всеми сообщения перед их отпралением в соответствующую оконную функцию

WH_CALLWNDPROCRET

вставляемая НООК-функция следит за всеми сообщениями после их отправления в оконную функцию

WH_CBT

вставляемая НООК-функция следит за окнами, а именно: за созданием, активацией, уничтожением, сменой размера; перед завершением системной команды меню, перед извлечением события мыши или клавиатуры из очереди сообщений, перед установкой фокуса и т.д.

WH_DEBUG

вставляемая НООК-функция следит за другими НООК-функциями.

WH_GETMESSAGE

вставляемая НООК-функция следит за сообщениями, посылаемыми в очередь сообщений.

WH_JOURNALPLAYBACK

вставляемая НООК-функция посылает сообщения, записанные до этого WH_JOURNALRECORD НООК'ом.

WH_JOURNALRECORD

эта НООК-функция записывает все сообщения куда-либо в специальном формате, причем позже они могут быть "воспроизведены" при помощи НООК'а WH_JOURNALPLAYBACK. Это в некотором роде аналог магнитофонной записи сообщений.

WH_KEYBOARD

вставляемая НООК-функция следит за сообщениями клавиатуры

WH_MOUSE

вставляемая НООК-функция следит за сообщениями мыши

WH_MSGFILTER

WH_SHELL

WH_SYSMSGFILTER

lpfn

указатель на непосредственно функцию. Обратите внимание, что если Вы ставите глобальный НООК, то НООК-функция обязательно должна находиться в некоторой DLL!!!

hmod

описатель DLL, в которой находится код функции.

dwThreadId

идентификатор потока, в который вставляется НООК

Подробнее о НООК-функциях смотри справку по Win32API.

 

Как удалять НООК?

НООК удаляется при помощи функции UnHookWindowsEx.

 

Пример использования НООК.

Ставим НООК, следящий за мышью (WH_MOUSE). Программа следит за нажатием средней кнопки мыши, и когда она нажимается, делает окно, находящееся непосредственно под указателем, поверх всех остальных (TopMost). Код самой НООК-функции помещен в библиотеку lib2.dll, туда же помещены и функции Start - для установки НООК, и Remove - для удаления НООК.

 

Добавить комментарий

Не использовать не нормативную лексику.

Просьба писать ваши замечания, наблюдения и все остальное,
что поможет улучшить предоставляемую информацию на этом сайте.

ВСЕ КОММЕНТАРИИ МОДЕРИРУЮТСЯ ВРУЧНУЮ, ТАК ЧТО СПАМИТЬ БЕСПОЛЕЗНО!


Защитный код
Обновить