WinAPI — Hook System
WinAPI — Hook System
WinAPI - Hook System function hookfunctions callmsgfilter Функция callmsgfilter фильтрует определенное сообщение и передает управление в процедуры, связанные с захватами wh_sysmsgfilter и wh_msgfilter. wh_sysmsgfilter и wh_msgfilter перехватывающие процедуры - программно-определенные функции обратного вызова (callback), которые проверяют и, дополнительно, модифицируют сообщения для диалогового окна, сообщения меню, или перемещает зону. bool callmsgfilter( lpmsg lpmsg, // Ссылка на структуру с данными о сообщении int ncode // Код перехвата ); Параметры lpmsg Ссылка на msg структуру, которая содержит сообщение, фильтруемое для перехватывающей процедуры ncode Определяется приложением и используется перехватом для того, чтоб ыопределить как обрабатывать сообщение. Код должен иметь одинаковые значения с системно-определенными кодами перехвата (msgf_ и hc) ассоциированы с wh_sysmsgfilter и wh_msgfilter. Возвращаемые значения Если приложение будет обрабатывать процесс в дальнейшем, то возвращается 0. Если нет, то возвращается не 0. Заметки windows вызывает callmsgfilter, чтобы позволить приложению проверять и контролировать поток сообщений в процессе внутренней обработки диалоговых окон, меню и scroll bar'ов, или когда пользователь активирует окно нажатием комбинации alt+tab. Приложение устанавливает перехват используя функцию setwindowshook. Смотри также: messageproc, msg, setwindowshookex, sysmsgproc callnexthookex Функция callnexthookex пропускает информацию перехвата в следующую процедуру перехвата в текущий цепь перехвата. Эта функция заменяется функцией defhookproc. lresult callnexthookex( hhook hhk, // Описатель (handle) данного перехвата int ncode, // Код перехвата, передаваемый в процедуру перехвата wparam wparam, // value passed to hook procedure lparam lparam // value passed to hook procedure ); Параметры hhk Идентифицирует текущий перехват. Приложение возвращает этот описатель как результат предыдущего вызова функции setwindowshookex. ncode Определяет код перехвата, пришедший в процедуру перехвата. Следующая процедура перехвата использует этот код для того, чтобы определить, как обрабатывать информацию о перехвате. wparam Определяет приходящую величину в процедуру перехвата.Значение этого параметра зависит от типа захвата, связываемого с текущей цепью перехватов. lparam Определяет приходящую величину в процедуру перехвата. Значение этого параметра зависит от типа захвата, связываемого с текущей цепью захватов. Возвращаемые значения Если функция успешно завершается, то возвращенным значением будет значение, возвращенное следующей процедурой перехвата в цепи перехватов. Текущая процедура перехвата также должна возвратить эту величину. Значение величины зависит от типа захвата. Для получения большей информации сморти описания индивидуальных процедур перехвата. Заметки Процедуры перехвата устанавливаются в цепи определенных типов перехватов. callnexthookex вызывает следующий перехват в цеппи. Вызов callnexthookex является дополнительной функцией. Процедура перехвата может вызывать эту функцию до или после обработки информации о перехвате. Если процедура перехвата не вызывает callnexthookex, windows не выхывает перехваты, установленные до установки данного перехвата. Смотри также: setwindowshook, setwindowshookex, unhookwindowshook, unhookwindowshookex callwndproc callwndproc -callback процедура перехвата, определенная в приложении или в библиотеке, которую система вызывает всякий раз, когда вызывается функция sendmessage. До прохождения сообщения в конечную окнную процедуру, система прогоняет сообщения через процедуры перехвата. Процедуры, перехватывающие сообщение могут проверять его, но не могут изменять. callwndproc - это метка-заполнитель для программно - определенной или библиотечной функции. lresult callback callwndproc( int ncode, // код перехвата wparam wparam, // флаг текущего процесса lparam lparam // адрес на структуру с данными о сообщении ); Параметры ncode Определяет процедуру, которая должна обработать перехват сообщения. Если ncode=hc_action, то процедура захвата должна обработать сообщение. Если ncode меньше 0, то процедура перехвата должна передать значение в функцию callnexthookex без дальнейшей обработки и вернуть значение, возвращенное callnexthookex. wparam Устанавливается тогда, когда сообщение было послано текущим процессом. Если сообщение было послано текущим процессом, это ненулевое; в противном случае, это null. lparam Указатель на структуру cwpstruct, которая содержит подробности о сообщении Возвращаемое значение Возвращаемое значение дожно быть 0. Заметки Процедура перехвата callwndproc не может модифицировать сообщение. После перехвата процедура возвращает управление системе, а сообщение проходит в оконную процедуру. Приложение устанавливает перехват определяя перехват типа wh_callwndproc и адрес перехватывающей процедуры на вызове процедуры setwindowshookex. Перехват wm_callwndproc не вызывается вызывает контекст нити, вызвавшей sendmessage, но не контекст нити, получившей сообщение. Смотри также: callnexthookex, cwpstruct, sendmessage, setwindowshookex callwndretproc Процедура callwndretproc сейчас поддерживается и winnt. Процедура - процедура перехвата, определенная приложением или библиотекой callback функция вызываемая после функции sendmessage. После прохода сообщения к окну-приемнику, система проходит по хук процедурам. Хук процедура может исследовать сообщение, но не может его изменять. lresult callback callwndretproc( int ncode, // Код перехвата wparam wparam, // Флаг текущего процесса lparam lparam // Адрес структуры с данными о сообщении ); Параметры ncode Определяет, когда хук процедура должна перехватывать сообщение. Если ncode=hc_action, тогда хук процедура будет обрабатывать сообщение. Если ncode меньше 0, то процедура перехвата должна передать сообщение функции callnexthookex без дальнейшей обработки и возвратить значение, от callnexthookex. wparam Определяет, послано ли сообщение текущим процессом. Если сообщение послано текущим процессом, то wparam; иначе, это null. lparam Указатель на структуру cwpretstruct, которая содержит детальную информацию о сообщении. Возвращаемое значение Возвращаемое значение должно быть 0. Заметки an application installs the hook procedure by specifying the wh_callwndprocret hook type and the address of the hook procedure in a call to the setwindowshookex function. callwndretproc is a placeholder for the application-defined or library-defined function name. Приложение устанавливает хук процедуру, определяя тип хука wh_callwndprocret и адрес процедуры хука в запросе к функции setwindowshookex. callwndretproc -держатель для определенного заявлением или определенного библиотекой названия(имени) функции. Смотри также callnexthookex, callwndproc, cwpretstruct, sendmessage, setwindowshookex cbtproc Процедура перехвата cbtproc определенная приложением или callback функцией в библиотеке, которую система вызывает до активации, создания, уничтожения, минимизации, максимизации, перемещения или изменением размера окна; до окончания системной команды; до удаления события от мыши, клавиатуры в системной очереди. Значение, возвращаемое хук процедурой определяет позволяет ли windows или предотвращает эту операцию. Приложения обучения (a computer-based training (cbt) application) используют эту хук процедуру для получения полезной информации от системы. lresult callback cbtproc( int ncode, // Код перехвата wparam wparam, // Зависит от кода хука lparam lparam // Зависит от кода хука ); Параметры ncode Определяет значение, которое хук процедура использует, чтобы определить, как использовать сообщение. Этот параметр может иметь следующие значения: Значение Описание hcbt_activate Система собирается активировать окно. hcbt_clickskipped Система удалила удалила сообщение мыши из очереди. После получения этого хук кода cbt приложение должно установить wh_journalplayback хук в ответ на сообщение мыши hcbt_createwnd Окно готово к созданию. Система вызывает эту хук процедуру до посылки сообщений wm_create и wm_nccreate к окну. Если хук процедура возвратит ненулевое значение, то система уичтожит окно; функция createwindow возвратит null, но сообщение wm_destroy не будет послано. Если хук процедура возвратит 0, то окно будет создано как обычно. В момент уведомления hcbt_createwnd, окно было создано, но окончательный размер и положение может быть неопределен, и возможно его родительское окно не установлено. Это возможность посылать сообщения в только что созданное окно, хотя это окно еще не получило сообщения wm_nccreate или wm_create. Также возможно изменить позицию в z order только что созданного окна путем изменения параметра hwndinsertafter из структуры cbt_createwnd hcbt_destroywnd Окно готово для уничтожения hcbt_keyskipped Система удаляет сообщение с клавиатуры из очереди. После получения хук кода cbt приложение должно установить хук процедуру wh_journalplayback_hook в ответ на сообщение с клавиатуры hcbt_minmax Окно собирается минимизироваться или максимизироваться hcbt_movesize Окно собирается передвигаться или измененять размеры hcbt_qs Система восстановила из очереди сообщение wm_queuesync hcbt_setfocus Окно собирается получить фокус ввода с клавиатуры hcbt_syscommand a system command is about to be carried out. this allows a cbt application to prevent task switching by means of hot keys. Системная команда готова к выполнению. Это позволяет cbt приложению переключать задачи посредством горячих клавиш Если ncode - меньше нуля, процедура ловушки должна передать управление функции callnexthookex без дальнейшей обработки сообщения и должна возвратить значение, возвращенное callnexthookex. wparam Зависит от параметра ncode. Для подробностей, см. следующий раздел Заметок. lparam Зависит от параметра ncode. Для подробностей, см. следующий раздел Заметок. Возвращаемые значения Для действий, соответствующих следующим кодам ловушки cbt, возвращаемое значение должно быть 0, чтобы позволить операцию, или 1 не позволить: hcbt_activatehcbt_createwndhcbt_destroywndhcbt_minmaxhcbt_movesizehcbt _setfocushcbt_syscommand Для действий, соответствующих следующим кодам ловушки cbt, возвращаемое значение игнорируется: hcbt_clickskippedhcbt_keyskippedhcbt_qs Заметки Процедура ловушки не должна установить процедуру ловушки wh_journalplayback_hook за исключением ситуаций, описанных в предшествующем списке кодов ловушки. Эта процедура ловушки должна быть в библиотеке динамических связей (dll). Приложение устанавливает процедуру ловушки, определяя тип ловушки как wh_cbt и адрес процедуры ловушки обращаясь к функции setwindowshookex. Следующая таблица описывает wparam и lparam параметры для каждого кода ловушки hcbt_: Значение wparam lparam hcbt_activate Определяет дескриптор окнf, собирающегося активизироваться Определяет длинный указатель на структуру cbtactivatestruct, содержащую дескриптор активного окна и определяет, изменяется ли активация из-за щелчка мыши. hcbt_clickskipped Идентифицирует сообщение мыши, удаленное из очереди сообщений системы Определяет длинный указатель на структуру mousehookstruct, содержащую результаты hit-test испытаний и дескриптор окна, для которого сообщение мыши предназначено. hcbt_createwnd Определяет дескриптор нового окна Определяет длинный указатель на структуру cbt_createwnd, содержащую параметры инициализации окна. Параметры включают координаты и габариты окна. Изменяя эти параметры, процедура ловушки cbtproc может устанавливать начальный размер и позицию окна. hcbt_destroywnd Определяет дескриптор окна, которое будет разрушено. Является неопределенным и должен быть установлен на нуль. hcbt_keyskipped Идентифицирует кнопку с виртуальным кодом. Определяет число повторов, скэн-код, код перехода клавиши, предыдущее состояние клавиши, и контекстный код. Значение hcbt_keyskipped послано процедуре ловушки cbtproc только, если установлена ловушка wh_keyboard . Для подробной информации, см. wm_keyup или сообщение wm_keydown. hcbt_minmax Определяет дескриптор окна, минимизируемого или максимизируемого. Определяет, младшее слово, значение видимого окна (sw) _ определябщего операцию. Для списка значений окна, см. showwindow. Старшее слово неопределено. hcbt_movesize Определяет дескриптор окна, которое нужно переместить или установить размер. Определяет длинный указатель на структуру rect, содержащую координаты окна. Изменяя значения в структуре, процедура ловушки cbtproc может устанавливать окончательные координаты окна. hcbt_qs Неопределен, должен быть 0. Неопределен, должен быть 0. hcbt_setfocus Определяет дескриптор окна, получающему фокус ввода. Определяет дескриптор окна, теряющему фокус ввода. hcbt_syscommand Определяет значение команды системы (cs_) определение команды системы. Для подробной информации относительно значений команд системы, см. wm_syscommand Содержит те же самые данные что и значение lparam wm_syscommand сообщения: Если команда системного меню выбрана мышью, слово младшего разряда содержит x-координату курсора, в аппаратных координатах устройства, и старшее слово содержит y-координату; иначе, параметр не используется. Смотри также callnexthookex, createwindow, setwindowshookex, wm_syscommand debugproc Хук процедура debugproc определяемая приложением или библиотекой callback функция, которую windows вызывает до вызова хук процедуры, которая связана с любым другим типом перехвата. Система предоставляет информацию о хуке, который должен быть вызван, и debugproc определяет, позволить ли хуку запуститься. lresult callback debugproc( int ncode, // Код перехвата wparam wparam, // Тип хука, собирающегося запуститься lparam lparam // Адрес структуры с отладочной информацией ); Параметры ncode Определяет, должна ли процедура перехвата обработать сообщение. Если ncode=hc_action, то хук процедура должна обработать сообщение. Если ncode меньше нуля, то хук процедура должна пропустить сообщение в функцию callnexthookex без дальнейшей обработке и должна вернуть значение, возвращенное callnexthookex. wparam Определяет тип перехвата, который будет вызван. Этот параметр может принимать следующие значения: wh_callwndproc Устанавливает процедуру перехвата, которая просматривает посланные сообщения к оконной процедуре. Для дополнительной информации, смотрите описание процедуры callwndproc. wh_callwndprocret Устанавливает процедуру перехвата, которая просматривает сообщения, которые только что были обработаны оконной процедурой. Для дополнительной информации смотрите описание процедуры callwndproc. wh_cbt Устанавливает процедуру перехвата, которая получает уведомления, полезные для cbt (программ компьютерного обучения). Для дополнительной информации смотри описание процедуры cbtproc. wh_debug Устанавливает процедуру перехвата, полезную при отладке других хук процедур. Для дополнительной информации смотри описание процедуры debugproc. wh_getmessage Устанавливает процедуру перехвата, которая контролирует сообщения, записанные в очередь. Для дополнительной информации смотри описание процедуры getmsgproc. wh_journalplayback Устанавливает процедуру перехвата, которая посылает сообщения, предварительно записываемые процедурой перехвата wh_journalrecord. Для дополнительной информации смотри описание процедуры journalplaybackproc. wh_journalrecord Устанавливает процедуру перехвата, которая записывает сообщения, посланные в системную очередь. Эта хук процедура полезна для записи макросов. Для дополнительной информации смотри описание процедуры journalrecordproc. wh_keyboard Устанавливает процедуру перехвата, которая контролирует сообщения от клавиатуры. См. описание keyboardproc. wh_mouse Устанавливает процедуру перехвата, которая контролирует сообщения от мыши. См. описание процедуры mouseproc. wh_msgfilter Устанавливает процедуру перехвата, которая просматривает сообщения, генерируемые в результате ввода в dialog box, message box, menu, или scroll bar. Хук процедура контролирует эти сообщения, только для приложения, которое установило этот хук. См описание процедуры messageproc. wh_shell Устанавливает процедуру перехвата, которая получает уведомления, полезные для расширенных приложений. См описание процедуры shellproc wh_sysmsgfilter Устанавливает процедуру перехвата, которая контролирует сообщения, генерируемые как результат ввода в dialog box, message box, menu, or scroll bar. Такая хук процедура контролирует все сообщения для всех приложений в системе. См описание процедуры sysmsgproc. lparam Указатель на структуру debughookinfo, которая содержит параметры, для прохода к предназначенной хук процедуре. Возвращаемые значения Для предотвращения установки перехватов в системе, возвращаемое значение должно быть ненулевым. Иначе процедура перехвата должна передать информацию о перехвате функции callnexthookex. Заметки Приложение устанавливает эту процедуру перехвата, определяя тип перехвата wh_debug и указатель на процедуру перехвата, в запросе к функции setwindowshookex. callwndproc и callwndretproc хранители имен функций для приложения или библиотеки. Смотри также: callnexthookex, callwndproc, callwndretproc, cbtproc, debughookinfo, getmsgproc, journalplaybackproc, journalrecordproc, keyboardproc, messageproc, mouseproc, setwindowshookex, shellproc, sysmsgproc foregroundidleproc Процедура перехвата foregroundidleproc определенная приложением callback функция, вызывается системой, когда 32 битная нить переднего плана собирается перейти в ожидание (приоритет idle). dword foregroundidleproc( int code, // Код перехвата dword wparam, // Не используется long lparam // Не используется ); Параметры code Определяет когда должна процедура перехвата обработать сообщение. Если code равен hc_action, хук процедура должна обработать сообщение. Если code меньше нуля, хук процедура должна передать сообщение к функции callnexthookex без дальнейшей обработки и должна возвратить значение, возвращенное функцией callnexthookex. wparam Не используется. lparam Не используется. Заметки Приложение устанавливает эту хук процедуру, определяя тип перехвата wh_foregroundidle и указатель на хук процедуру в запросе к функции setwindowshookex. foregroundidleproc - место хранения имен функций в приложении. Это приспособленный к нитям перехват. Смотри также callnexthookex, setwindowshookex getmsgproc Процедура ловушки getmsgproc - определенная приложением или библиотекой функция обратного вызова, вызывается системой тогда, когда функция getmessage отыскала сообщение в очереди сообщений приложения. Перед прохождением найденного сообщения к процедуре окна адресата, система передает сообщение к процедуре ловушки. lresult callback getmsgproc( int code, // Код ловушки wparam wparam, // Флажок удаления lparam lparam // Адрес структуры с сообщением ); Параметры code Определяет, должна ли процедура ловушки обработать сообщение. Если code равен hc_action, процедура ловушки должна обработать сообщение. Если код - меньше чем нуль, процедура ловушки должна передать управление функции callnexthookex без дальнейшей обработки сообщения и должна возвратить значение, возвращенное callnexthookex. wparam Определяет, было ли сообщение удалено из очереди. Этот параметр может иметь одно из следующих значений: Значение Описание pm_noremove Определяет, что сообщение не было удалено из очереди. (Приложение вызвало функцию peekmessage, определяя флажок pm_noremove.) pm_remove Определяет, что сообщение было удалено из очереди. (Приложение вызвало функцию getmessage, или функцию peekmessage, определяя флажок pm_remove.) lparam Указатель на структуру msg, содержащую подробную информацию о сообщении. Возвращаемые значения Возвращаемое значение должно быть нулем. Заметки Процедура ловушки getmsgproc может исследовать или изменять сообщение. После возврата управления системе, функция getmessage возвращает сообщение со всеми изменениями, приложению, которое первоначально вызвало его. Приложение устанавливает эту процедуру ловушки, определяя тип ловушки как wh_getmessage и адрес процедуры ловушки обращаясь к функции setwindowshookex. getmsgproc - метка - заполнитель для определенного приложением или определенного библиотекой имени функции. Смотри также callnexthookex, getmessage, msg, peekmessage, setwindowshookex journalplaybackproc Процедура ловушки journalplaybackproc - callback (обратного вызова) функция, которая вставляет сообщения от мыши и клавиатуры в системную очередь сообщений. Обычно, приложения используют эту процедуру, чтобы воспроизвести ряд действий мыши и клавиатуры, предварительно записанных процедурой ловушки journalrecordproc. Пока процедура ловушки journalplaybackproc установлена, ввод с мыши и клавиатуры заблокирован. lresult callback journalplaybackproc( int code, // Код ловушки wparam wparam, // неопределено lparam lparam // Адрес обрабатываемого сообщения ); Параметры code Определяет код процедуры ловушки, используемый для определения способа обработки сообщения. Этот параметр может иметь одно из следующих значений: Значение Описание hc_getnext Процедура ловушки должна копировать текущее сообщение мыши или сообщение клавиатуры в структуру eventmsg, указатель на которую находиться в lparam. hc_noremove Приложение вызвало функцию peekmessage с wremovemsg установленным как pm_noremove, указывая, что сообщение не удалено из очереди после обработки peekmessage. hc_skip Процедура ловушки должна подготовиться скопировать следующее сообщение мыши или сообщение клавиатуры в структуру eventmsg, на которую указывает lparam. После получения кода hc_getnext, процедура ловушки должна копировать сообщение в структуру. hc_sysmodaloff Системно-модальное диалоговое окно было разрушено. Процедура ловушки должна продолжить воспроизводить сообщения. hc_sysmodalon Системно-модальное диалоговое окно отображается. Пока диалоговое окно не разрушено, процедура ловушки должна прекратить воспроизводить сообщения. Если code - меньше нуля, процедура ловушки должна передать управление функции callnexthookex без дальнейшей обработки и должна возвратить значение, возвращенное callnexthookex. wparam Определено как null. lparam Указывает на структуру eventmsg, которая представляет собой сообщение, обрабатываемое процедурой ловушки. Этот параметр допустим только, когда параметр code - hc_getnext. Возвращаемые значения Для того, чтобы заставить систему ждать перед обработкой сообщения, возвращаемое значение должно быть количеством времени, в импульсах сигнала времени часов, которое система должна ждать. (Это значение может быть получено, замеряя различие между элементами времени в текущих и предыдущих входных сообщениях.) Чтобы обработать сообщение немедленно, возвращаемое значение должно быть нуль. Возвращаемое значение используется только, если код ловушки - hc_getnext; иначе, он игнорируется. Заметки Процедура ловушки journalplaybackproc должна копировать входное сообщение к параметру lparam. Сообщение должно быть предварительно записано, используя процедуру ловушки journalrecordproc, которая не должна изменять его. Чтобы выполнять одно и то же сообщение много раз, процедура ловушки может называться несколько раз с набором параметров кодов к hc_getnext без вмешивающегося обращения с code, равным hc_skip. Если code - hc_getnext, и возвращаемое значение больше нуля, система бездействует столько миллисекунд, сколько определено возвращаемым значением. Когда система пробуждается, то вызывает процедуру ловушки снова с code, равным hc_getnext, чтобы восстановить то же самое сообщение. Возвращаемое значение от этого нового обращения до journalplaybackproc должно быть нуль; иначе, система опять будет бездействовать столько миллисекунд, сколько определено возвращаемым значением, вызывать journalplaybackproc снова, и так далее. Система может повиснуть. В отличие от большинства других глобальных процедур ловушек, journalrecordproc и journalplaybackproc - процедуры ловушки всегда вызвываемые контекстом нити, которая устанавливают ловушку. После возврата управления системе, сообщение продолжает обработываться. Если code - hc_skip, процедура ловушки должна быть готова возвратить следующее записанное сообщение при следующем обращении. Приложение устанавливает процедуру ловушки journalplaybackproc, определяя тип ловушки как wh_journalplayback и адрес процедуры ловушки в обращении к функции setwindowshookex. win32 journalrecordproc не должна помещаться в dll, она может находиться только непосредственно в приложении. Если пользователь нажимает ctrl + esc или ctrl + alt + del в течение воспроизведения журнала, система останавливает проигрыватель, отсоединяет процедуру проигрывателя журнала, и посылает сообщение wm_canceljournal проигрывающему приложению. Если процедура ловушки возвращает сообщение в диапазоне от wm_keyfirst до wm_keylast, то применяются следующие условия: · paraml элемент структуры eventmsg определяет виртуальный код клавиши, которая была нажата. · paramh элемент структуры eventmsg определяет скан-код. · Не имеется никакого способа определить счет repeast (?). Событие всегда возьмет представляющее событие клавиши. journalplaybackproc - метка - заполнитель для определенного приложением или определенного библиотекой имени функции. Смотри также: callnexthookex, eventmsg, journalrecordproc, peekmessage, setwindowshookex, wm_canceljournal journalrecordproc Процедура ловушки journalrecordproc - функция обратного вызова, которая записывает сообщения, а система удаляет их из очереди. Позже, приложение может использовать процедуру ловушки journalplaybackproc, чтобы воспроизвести записанные сообщения. lresult callback journalrecordproc( int code, // Код ловушки wparam wparam, // Неопределено lparam lparam // Адрес обрабатываемого сообщения ); Параметры code Определяет, как обработать сообщение. Этот параметр может иметь одно из следующих значений: Значение Описание hc_action lparam указывает на структуру eventmsg, содержащую информацию относительно сообщения, удаленного из системной очереди сообщений. Процедура ловушки должна записать содержанимое структуры, копируя их в свой буфер или файл. hc_sysmodaloff Системно-модальное диалоговое окно было разрушено. Процедура ловушки должна продолжить к запись. hc_sysmodalon Системно-модальное диалоговое окно отображается. Пока диалоговое окно не разрушено, процедура ловушки должна прекратить делать запись. Если code - меньше нуля, процедура ловушки должна передать сообщение функции callnexthookex без дальнейшей обработки и должна возвратить значение, возвращенное callnexthookex. wparam Должно иметь значение null. lparam Указатель на структуру eventmsg, которая содержит информацию о сообщении, которую нужно записать. Возвращаемые значения Возвращаемое значение игнорируется. Заметки Процедура ловушки journalrecordproc должна копировать, но не изменять сообщения. После возврата управления системе, сообщение продолжает обрабатываться. Приложение устанавливает процедуру ловушки journalrecordproc, определяя тип ловушки wh_journalrecord и адрес процедуры ловушки обращаясь к функции setwindowshookex. win32 ловушка journalrecordproc не должна располагаться в dll. win32 journalrecordproc можно располагать только непосредственно в приложении. В отличие от большинства других глобальных процедур ловушк, journalrecordproc и journalplaybackproc всегда вызванются контекстом нити, которая устанавливает ловушку. Приложение, которое установило ловушку journalrecordproc, должно наблюдать за vk_cancel виртуальный keycode (который определен как ctrl + break на большинстве клавиатур). Этот виртуальный keycode должен быть проинтерпретирован приложением как сигнал, что пользователь хочет останавливаться запись журнала. Приложение должно отреагировать на останов, заканчивая запись и удаление процедуры ловушки journalrecordproc. Удаление важно. Это предотвращает приложение, записывающее журнал событий от зависания система, приводя к останову внутри процедуры ловушки. Это как сигнал, чтобы остановить запись журнала, так что ctrl + break не может быть записан обычным методом. Начиная с ctrl + c комбинация не имеет никакой роли как сигнал для контроля записи, следовательно, могут быть записаны. Имеются две других комбинации клавиш, которые не могут быть записаны: ctrl + esc и ctrl + alt + del. Те две комбинации клавиш заставляют систему останавливать все записывающие действия, удалять все ловушки (journaling), и посылать сообщение wm_canceljournal к записывающему приложению. Смотри также: callnexthookex, eventmsg, journalplaybackproc, setwindowshookex, wm_canceljournal keyboardproc Процедура ловушки keyboardproc - определенная приложением или библиотекой функция обратного вызова вызывается системой всякий раз, когда из прикладной программы вызывается функция getmessage или peekmessage и имеется сообщение от клавиатуры (wm_keyup или wm_keydown). lresult callback keyboardproc( int code, // Код ловушки wparam wparam, // Виртуальный клуч-код lparam lparam // Информация о нажатой клавише ); Параметры code Определяет код использования процедуры ловушки, чтобы определить, как обработать сообщение. Этот параметр может быть одно из следующих значений: Значение Описание hc_action wparam и lparam параметры содержат информацию относительно нажатой клавиши. hc_noremove Параметры wparam и lparam содержат информацию относительно нажатой клавиши, и сообщение не было удалено из очереди сообщений. (Приложение вызвало функцию peekmessage, определяя флажок pm_noremove.) Если code - меньше нуля, процедура ловушки должна передать управление функции callnexthookex без дальнейшей обработки и должна возвратить значение, возвращенное callnexthookex. wparam Определяет код с виртуальным идентификатором клавиши, которая генерировала сообщение нажатия клавиши. lparam Определяет повторный счет, скэн-код, флажок расширенной клавиши, контекстный код, предыдущий флажок состояния клавиши, и флажок переходного состояния. Этот параметр может быть комбинация следующих значений: Значение Описание 0-15 Определяет повторный счет. Значение - число раз, сколько нажатие клавиши повторено в результате удерживания пользователем кнопки. 16-23 Определяет скэн-код. Значение зависит от первоначального изготовителя борудования (oem). 24 Определяет,является ли клавиша расширенной кнопкой, типа функциональной кнопки или кнопки на цифровой клавиатуре. Значение 1, если кнопка - расширенная; иначе, это - 0. 25-28 Зарезервировано 29 Определяет контекстный код. Значение 1, если клавиша alt -; иначе, это - 0. 30 Определяет предыдущее состояние клавиши. Значение 1, если клавиша нажата прежде, чем сообщение послано; значение - 0, если клавиша была отпущена. 31 Определяет переходное состояние. Значение - 0, если клавиша нажимается и 1, если это отпускается. Для подробной информации относительно параметра lparam, см. Флажки keystroke message flags. Возвращаемые значения Чтобы предотвратить windows от прохождения сообщения к остальной части цепочки ловушок или к выходной оконной процедуре, возвращаемое значение должно быть отличное от нуля. Чтобы позволить windows передавать сообщение к выходной процедуре окна, обходя(шунтируя) процедуры дальнейшего пребывания в цепочке, возвращаемое значение должно быть нуль. Заметки Приложение устанавливает процедуру ловушки, определяя тип ловушки wh_keyboard и адрес процедуры ловушки вызывая вунуйию setwindowshookex. Смотри также callnexthookex, getmessage, peekmessage, setwindowshookex, wm_keyup, wm_keydown messageproc Процедуру ловушки messageproc - определенную приложением функцию обратного вызова система вызывает после того, как входное событие происходит в диалоговом окне, окне сообщения, меню, или полосе прокрутки, но прежде, чем сообщение, сгенерированное входным событием будет обработано. Процедура ловушки может контролировать сообщения для диалогового окна, окна сообщения, меню, или полосы прокрутки, созданной специфическим приложением или всеми приложениями. lresult callback messageproc( int code, // Код ловушки wparam wparam, // Неопределено lparam lparam // Адрес структуры с данными сообщения ); Параметры code Определяет тип входного события, которое генерировало сообщение. Этот параметр может быть одно из следующих значений: Значение Описание msgf_ddemgr Входное событие произошло, в то время как Библиотека Управлений Динамических обменов данными (ddeml) ждала окончания синхронной транзакции. Для подробной информации относительно ddeml, см. Библиотеку Управлений Динамических обменов данными (dynamic data exchange management library). msgf_dialogbox Входное событие произошло в окне сообщения или диалоговом окне. msgf_menu Входное событие произошло в меню msgf_nextwindow Входное событие произошло в результате нажатия пользователем alt + tab, чтобы активизировать другое окно. msgf_scrollbar Входное событие произошло в полосе прокрутки. Если code - меньше нуля, процедура ловушки должна передать управление функции callnexthookex без дальнейшей обработки сообщения и возвратить значение, возвращенное callnexthookex. wparam Должно иметь значение null. lparam Указатель на структуру msg. Возвращаемые значения Если процедура ловушки обрабатывает сообщение, возвращаемое значение должно быть отличное от нуля. Иначе, должно быть нулем. Заметки Приложение устанавливает процедуру ловушки, определяя тип ловушки wh_msgfilter и адрес процедуры ловушки обращаясь к функции setwindowshookex. Если приложение, которое использует ddeml и выполняет синхронные трансакции, должно обработать сообщения прежде, чем оно будет послано, оно должно использовать ловушку wh_msgfilter. messageproc - метка - заполнитель для определенного приложением имени функции. Смотри также callnexthookex, setwindowshookex, msg mouseproc Процедура ловушки mouseproc - определенная приложением библиотекой функция обратного вызова вызывается системой всякий раз, когда из прикладной программы вызваны функции getmessage или peekmessage и имеется сообщение мыши, которое следует обработать. lresult callback mouseproc( int ncode, // Код ловушки wparam wparam, // Идентификатор сообщения lparam lparam // Координаты мыши ); Параметры ncode Определяет код использования процедуры ловушки, чтобы определить, как обработать сообщение. Этот параметр может иметь одно из следующих значений: Значение Описание hc_action Параметры wparam и lparam содержат информацию относительно сообщения мыши. hc_noremove Параметры wparam и lparam содержат информацию относительно сообщения мыши, и сообщение мыши не было удалено из очереди сообщений. (Приложение вызвало функцию peekmessage, определяя флажок pm_noremove.) Если ncode - меньше нуля, процедура ловушки должна передать управление функции callnexthookex без дальнейшей обработки сообщения и должна возвратить значение, возвращенное callnexthookex. wparam Определяет идентификатор сообщения мыши. lparam Указывает на структуру mousehookstruct. Возвращаемые значения Чтобы давать возможность системе обработать сообщение, возвращаемое значение должно быть нулем. Чтобы отбросить сообщение, возвращаемое значение должно быть отлично от нуля. Заметки Процедура ловушки не должна установить функцию повторного вызова journalplaybackproc. Приложение устанавливает процедуру ловушки, определяя тип ловушки wh_mouse и адрес процедуры ловушки обращаясь к функции setwindowshookex. Смотри также: callnexthookex, getmessage, journalplaybackproc, mousehookstruct, peekmessage, setwindowshookex. setwindowshookex Функция setwindowshookex устанавливает определенную приложением процедуру ловушки в цепочку ловушек. Приложение устанавливает процедуру ловушки, чтобы контролировать некоторые типы событий в системе. Процедура ловушки может контролировать события, связанные со специфической нитью или со всеми нитями в системе. Эта функция отменяет функцию setwindowshook. hhook setwindowshookex( int idhook, // Тип устанавливаемой ловушки hookproc lpfn, // Адрес процедуры ловушки hinstance hmod, // Дескриптор образца приложения dword dwthreadid // Идентификатор нити, для которой установить ловушку ); Параметры idhook Определяет тип процедуры ловушки, которая будет установлена. Этот параметр можетиметь одно из следующих значений: Значение Описание wh_callwndproc Устанавливает процедуру ловушки, которая контролирует сообщения прежде, чем система посылает его процедуре окна адресата. Для подробной информации, см. процедуру ловушки callwndproc. wh_callwndprocret Устанавливает процедуру ловушки, которая контролирует сообщения после того, как они были обработаны процедурой окна адресата. Для подробной информации, см. процедуру ловушки callwndretproc. wh_cbt Устанавливает процедуру ловушки, которая получает уведомления, полезные для обучающих приложений (cbt). Для подробной информации, см. процедуру ловушки cbtproc. wh_debug Устанавливает процедуру ловушки, полезную для отладки других процедур ловушки. Для подробной информации, см. процедуру ловушки debugproc. wh_getmessage Устанавливает процедуру ловушки, которая контролирует сообщения, зарегистрированные в очереди сообщений. Для подробной информации, см. процедуру ловушки getmsgproc. wh_journalplayback Устанавливает процедуру ловушки, которая регистрирует сообщения, предварительно записанные процедурой ловушки wh_journalrecord. Для подробной информации, см. процедуру ловушки journalplaybackproc. wh_journalrecord Устанавливает процедуру ловушки, которая записывает входные сообщения, зарегистрированные в очереди сообщений системы. Эта ловушка полезна для записи макрокоманд. Для подробной информации, см. процедуру ловушки journalrecordproc. wh_keyboard Устанавливает процедуру ловушки, которая контролирует сообщения нажатия клавиш. Для подробной информации, см. процедуру ловушки keyboardproc. wh_mouse Устанавливает процедуру ловушки, которая контролирует сообщения мыши. Для подробной информации, см. процедуру ловушки mouseproc. wh_msgfilter Устанавливает процедуру ловушки, которая контролирует сообщения, сгенерированные в результате входного события в диалоговом окне, окне сообщения, меню, или полосе прокрутки. Для подробной информации, см. процедуру ловушки messageproc. wh_shell Устанавливает процедуру ловушки, которая получает уведомления, полезные для приложений оболочки. Для подробной информации, см. процедуру ловушки shellproc. wh_sysmsgfilter Устанавливает процедуру ловушки, которая контролирует сообщения, сгенерированные в результате входного события в диалоговом окне, окне сообщения, меню, или полосе прокрутки. Процедура ловушки контролирует эти сообщения для всех приложений в системе. Для подробной информации, см. процедуру ловушки sysmsgproc. lpfn Указывает на процедуру ловушки. Если dwthreadid параметр, равен нулю или определяет идентификатор нити, созданного другим процессом, параметр lpfn должен указать на процедуру ловушки в библиотеке динамических связей (dll). Иначе, lpfn может указывать на процедуру ловушки в коде, связанном с текущим процессом. hmod Идентифицирует dll, содержащую процедуру ловушки, на которую указывает параметр lpfn. Параметр hmod должен быть установлен как null, если параметр dwthreadid определяет нить, созданную текущим процессом и если процедура ловушки - внутри кода, связанного с текущим процессом. dwthreadid Определяет идентификатор нити, с которым процедура ловушки должна быть связана. Если этот параметр - нуль, то процедура ловушки связана со всеми существующими нитями. Возвращаемые значения Если функция обработана, возвращаемое значение - дескриптор процедуры ловушки. Если запрос провален, возвращаемое значение null. Заметки Ошибка может происходить, если параметр hmod равен null, и параметр dwthreadid - нуль или определяет идентификатор нити, созданного другим процессом. Формирование цепочки к следующей процедуре ловушки (то есть вызыв функции callnexthookex) по выбору. Приложение или библиотека может вызывать следующую процедуру ловушки или прежде или после любой обработки в собственной процедуре ловушки. Хотя формирование цепочки на следующую ловушку выборочно, это строго рекомендуется; иначе, другие приложения, которые установили ловушки, не будут получать уведомления ловушки и могут в результате вести себя неправильно. Перед завершением, приложение должно вызвать функцию unhookwindowshookex, чтобы освободить ресурсы, связанные с ловушкой. Контекст ловушки зависит от типа ловушки. Некоторые ловушки могут быть установлены только с контекстом системы; другие могут также быть установлены только для специфической нити, как показано в следующем списке: Ловушка Контекст wh_callwndproc thread or system wh_cbt thread or system wh_debug thread or system wh_getmessage thread or system wh_journalplayback system only wh_journalrecord system only wh_keyboard thread or system wh_mouse thread or system wh_msgfilter thread or system wh_shell thread or system wh_sysmsgfilter system only Для определенного типа ловушки, сначала вызываются ловушки нити, затем ловушки системы. Ловушки системы - общедоступнный ресурс, и их установка воздействует на все приложения. Все системные функции ловушки должны быть в библиотеках (dll). Системные ловушки должны быть ограничены приложениями специального назначения или использоваться как помощь в разработке и в течение отладки приложения. Библиотеки, которые больше не нуждаются в ловушках, должны удалить процедуры ловушек. Смотри также callnexthookex, callwndproc, callwndretproc, cbtproc, debugproc, getmsgproc, journalplaybackproc, journalrecordproc, keyboardproc, mouseproc, messageproc, shellproc, sysmsgproc, unhookwindowshookex. shellproc Процедура ловушки shellproc - определенная приложением или библиотекой функция обратного вызова используется приложениями оболочками, чтобы получать полезные уведомления от системы. lresult callback shellproc( int ncode, // Код ловушки wparam wparam, // Специфическая для события информация lparam lparam // Специфическая для события информация ); Параметры ncode Определяет код ловушки. Этот параметр может быть одно из следующих значений: Значение Описание hshell_activateshellwindow Оболочка должна активизировать основное окно. hshell_getminrect Только для windows 95: окно минимизируется или максимизируется, и система нуждается в координатах минимизированного прямоугольника для окна. wparam параметр содержит дескриптор окна, и параметр lparam содержит адрес структуры rect, которая получает координаты. hshell_language Только для windows 95: язык был изменен, или была загружена новая раскладка клавиатуры. hshell_redraw Только для windows 95: заголовок окна на панели задач был повторно выведен. wparam параметр содержит дескриптор окна. hshell_taskman Только для windows 95: пользователь выбрал список задач. wparam параметр неопределен и должен игнорироваться. Приложение оболочка, которое обеспечивает список задач, должно возвратить true, чтобы предотвратить систему от показа списка задач. hshell_windowactivated Только для windows 95: Активизировалось окно. wparam параметр содержит дескриптор окна. hshell_windowcreated Окно верхнего уровня, ненаходящееся в собственности было создано. Окно уже существует когда система вызовет функцию shellproc. hshell_windowdestroyed Окно верхнего уровня, ненаходящееся в собственности собирается быть разрушенным. Окно все еще существует когда система вызовет функцию shellproc. Если ncode - меньше нуля, процедура ловушки должна передать управление функции callnexthookex без дальнейшей обработки сообщения и должна возвратить значение, возвращенное callnexthookex. wparam Определяет дополнительную информацию, которая может понадобиться приложению оболочке. Если параметр ncode - hshell_activateshellwindow, то параметр wparam не используется. Если ncode - hshell_windowcreated или hshell_windowdestroyed, wparam определяет дескриптор окна, создаваемого или разрушенного, соответственно. lparam windows 95: Определяет дополнительную информацию. Точное значение зависит от значения параметра ncode. Если ncode - hshell_getminrect, lparam - lprect. Если ncode - hshell_windowsactivated, lparam - ffullscreen. Если ncode - hshell_redraw, lparam - fnewflash. windows nt: Этот параметр должен быть нулем. Возвращаемые значения Возвращаемое значение должно быть нулем Заметки Приложение устанавливает процедуру ловушки, определяя тип ловушки wh_shell и адрес процедуры ловушки обращаясь к функции setwindowshookex. shellproc - метка - заполнитель для определенного приложением или определенного библиотекой имени функции. Смотри также callnexthookex, sendmessage, setwindowshookex sysmsgproc Процедура ловушки sysmsgproc - определенная библиотекой функция обратного вызова вызывается системой после того, как входное событие происходит в диалоговом окне, окне сообщения, меню, или полосе прокрутки, но прежде, чем сообщение, сгенерированное входным событием будет обработано. Процедура ловушки может контролировать сообщения для любого диалогового окна, окна сообщения, меню, или полосы прокрутки в системе. lresult callback sysmsgproc( int ncode, // Флаг сообщения wparam wparam, // Неопределено lparam lparam // Адрес структуры с данными о сообщении ); Параметры ncode Определяет тип входного события, которое генерировало сообщение. Этот параметр можетиметь одно из следующих значений: Значение Описание msgf_dialogbox Входное событие произошло в окне сообщения или диалоговом окне. msgf_menu В меню msgf_scrollbar Для полосы прокрутки msgf_nextwindow Входное событие произошло в результате нажатия пользователем комбинации alt + tab, чтобы активизировать другое окно. Если ncode - меньше нуля, процедура ловушки должна передать управление к функции callnexthookex без дальнейшей обработки сообщения и должна возвратить значение, возвращенное callnexthookex. wparam Должно быть null. lparam Указывает на структуру сообщения msg. Возвращаемые значения Если процедура ловушки обрабатывает сообщение, возвращаемое значение должно быть отлично от нуля. Иначе, должно быть нулем. Заметки Приложение устанавливает процедуру ловушки, определяя тип ловушки как wh_sysmsgfilter и адрес процедуры ловушки обращаясь к функции setwindowshookex. sysmsgproc - метка - заполнитель для определенного библиотекой имени функции. См. Также callnexthookex, СООБЩЕНИЕ, setwindowshookex unhookwindowshookex Функция unhookwindowshookex удаляет процедуру ловушки, установленную в цепочку ловушок функцией setwindowshookex. bool unhookwindowshookex ( hhook hhk // дескриптор процедуры ловушки, которую нужно удалить ); Параметры hhk Идентифицирует ловушку, которая будет удалена. Этот параметр - дескриптор ловушки, полученный предыдущим обращением к функции setwindowshookex. Возвращаемые значения Если функция отрабатывает успешно, возвращаемое значение отлично от нуля. Если функция потерпел акрах, возвращаемое значение - нуль. Заметки Процедура ловушки может быть в таком состоянии, что ее вызвали другой нитью даже после возврата из unhookwindowshookex. Если процедура ловушки не вызывается сразу, то она будет немедленно удалена, не дожидаясь возврата из unhookwindowshookex.