Пятница, 26.04.2024, 09:13 Приветствую вас Гость | Группа "Гости" 
Меню сайта

Категории раздела
Вирусология [40]
Статьи о вирусах
Системные [1]
Работа с системой
Примеры [45]
Приёмы, функции, процедуры
Ceти [1]
Работа с интернет
Шуточные программы [5]
Пишем шуточные программки
Остальное [6]
Всё что не вошло

Популярные статьи

Недавние темы

Опрос
Можете ли Вы обойтись без общения через интернет?
Всего ответов: 181

Главная » Статьи » Delphi » Примеры

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 Устанавливает процедуру ловушки, которая контролирует сообщения, сгенерированные в результате входного события в диалоговом окне, окне сообщения, меню, или полосе прокрутки. Для подробн
Категория: Примеры | Добавил: dolphin (11.04.2009)
Просмотров: 5410 | Рейтинг: 3.5/4

Всего комментариев: 0
avatar
Профиль


Логин:
Пароль:

Поиск

Наша кнопка
Вирусология, взгляд из Delphi

Статистика
Top.Mail.Ru Яндекс.Метрика Счетчик тИЦ и PR
Статистика материалов
Файлов: 454
Форум: 1165/8116
Коментариев: 768
Новостей: 29

Статистика пользователей
Всего: 332
За неделю: 1
Вчера: 0
Сегодня: 0
Всего онлайн: 1
Гостей: 1
Пользователей: 0

delphicode.ru © 2008 - 2024 Хостинг от uCoz