Функция JournalRecordProc
Процедура фильтра (hook) JournalRecordProc - определяемая программой или определяемая библиотекой функция повторного вызова, используемая функцией SetWindowsHookEx. Функция записывает сообщения, которые система удаляет из системной очереди сообщений. Позже, прикладная программа может использовать процедуру JournalPlaybackProc, чтобы воспроизвести сообщения.
Тип HOOKPROC определяет указатель на эту функцию повторного вызова. JournalRecordProc - это имя - заместитель для определяемого программой или определяемого библиотекой имени функции.
Синтаксис
LRESULT CALLBACK JournalRecordProc( int code, WPARAM wParam, LPARAM lParam ); |
Параметры
code
[in] Устанавливает, как обработать сообщение. Если code - меньше чем нуль, процедура фильтра (hook) должна передать сообщение в функцию CallNextHookEx без дальнейшей обработки и должна возвратить значение, возвращенное CallNextHookEx. Этим параметром может быть одно из ниже перечисленных значений.
Значение | Предназначение |
HC_ACTION | Параметр lParam - указатель на структуру EVENTMSG, содержащую информацию о сообщении, удаленном из системной очереди. Процедура фильтра (hook) должна записать содержимое структуры, копируя его в буфер или файл. |
HC_SYSMODALOFF | Системное модальное диалоговое окно разрушилось. Процедура фильтра (hook) должна возобновить запись. |
HC_SYSMODALON | Системное модальное диалоговое окно показывается на экране. Пока диалоговое окно не разрушено, процедура фильтра (hook) должна прекратить делать запись. |
wParam
Этот параметр не используется.lParam
[in] Указатель на структуру EVENTMSG, которая содержит записываемое сообщение.Возвращаемое значение
Возвращаемое значение игнорируется.
Замечания
Процедура фильтра (hook) JournalRecordProc должна копировать, но не изменять сообщения. После того, как процедура фильтра (hook) возвращает управление системе, сообщение продолжает обрабатываться.
Устанавливайте процедуру фильтра (hook) JournalRecordProc, определяя тип фильтра как WH_JOURNALRECORD и указатель на процедуру при вызове функции SetWindowsHookEx.
Процедура фильтра (hook) JournalRecordProc не должна находиться в динамически подключаемой библиотеке (DLL). JournalRecordProc может находится непосредственно в прикладной программе.
В отличие от большинства других процедур глобального фильтра (hook), процедуры фильтра JournalRecordProc и JournalPlaybackProc всегда вызываются в контексте потока, которые устанавливают фильтр (hook).
Приложение, которое установило процедуру фильтра (hook) JournalRecordProc, должно следить за кодом виртуальной клавиши VK_CANCEL (который, осуществляется как комбинация клавиш CTRL+BREAK на большинстве клавиатуры). Этот код виртуальной клавиши должен интерпретироваться приложением как сигнал, что пользователь желает остановить запись в журнал. Приложение должно ответить на него завершением записи последовательности и удалением процедуры фильтра (hook) JournalRecordProc. Удаление важно. Оно препятствует приложению ведущему журнал блокировать систему, "подвешивая" ее при помощи процедуры фильтра (hook).
Эта роль как сигнал, чтобы остановить запись в журнал, означает, что комбинация клавиш CTRL+BREAK сама не может быть записана. Так как комбинация клавиш CTRL+C не имеет такой роли, как сигнал ведения журнала, то эта комбинация может записаться. Есть еще две других комбинации клавиш, которые не могут записываться: это CTRL+ESC и CTRL+ALT+DEL. Эти две комбинации клавиш заставляют систему останавливать все действия ведения журнала (запись или воспроизведение), чтобы удалить все фильтры (hook), ведущие запись в журнал и послать сообщение WM_CANCELJOURNAL в приложение ведущее журнал.
Смотри также
Обзор Фильтр-процедуры (hooks) событий, Функции, используемые фильтрами (hook), CallNextHookEx, EVENTMSG, JournalPlaybackProc, SetWindowsHookEx, WM_CANCELJOURNAL
Размещение и совместимость JournalRecordProc |
|
Windows. NET Server |
Да |
Windows XP |
Да |
Windows 2000 |
Да |
Windows NT |
Да версии 3.1 и выше |
Windows Me |
Да |
Windows 98 |
Да |
Windows 95 |
Да |
Используемая библиотека |
Нет |
Заголовочный файл |
|
- объявлено в |
Winuser.h |
- включено в |
Windows.h |
Unicode |
Нет |
Замечания по платформе |
Не имеется |