Поделиться через


Функция JournalRecordProc

Описание

Определяемая приложением или библиотекой функция обратного вызова, используемая с функцией SetWindowsHookEx . Функция записывает сообщения, которые система удаляет из очереди системных сообщений. Позже приложение может использовать процедуру перехватчика JournalPlaybackProc для воспроизведения сообщений.

Тип HOOKPROC определяет указатель на эту функцию обратного вызова. JournalRecordProc — это заполнитель для имени функции, определяемой приложением или библиотекой.

LRESULT CALLBACK JournalRecordProc(
  _In_ int    code,
       WPARAM wParam,
  _In_ LPARAM lParam
);

Параметры

code [in]

Тип: int

Указывает способ обработки сообщения. Если код меньше нуля, процедура перехватчика должна передать сообщение функции CallNextHookEx без дальнейшей обработки и возвращать значение, возвращаемое CallNextHookEx. Этот параметр может принимать одно из указанных ниже значений.

Значение Значение
HC_ACTION 0 Параметр lParam является указателем на структуру EVENTMSG , содержащую сведения о сообщении, удаленном из системной очереди. Процедура перехватчика должна записывать содержимое структуры, скопировав его в буфер или файл.
HC_SYSMODALOFF 5 Системно-модальное диалоговое окно было уничтожено. Процедура перехватчика должна возобновить запись.
HC_SYSMODALON 4 Отображается системно-модальное диалоговое окно. Пока диалоговое окно не будет уничтожено, процедура перехватчика должна прекратить запись.

wParam

Тип: WPARAM

Этот параметр не используется.

lParam [in]

Тип: LPARAM

Указатель на структуру EVENTMSG , содержащую записываемое сообщение.

Возвращаемое значение

Тип: LRESULT

Возвращаемое значение игнорируется.

Комментарии

Процедура перехватчика JournalRecordProc должна копировать, но не изменять сообщения. После того как процедура перехватчика вернет управление системе, сообщение продолжает обрабатываться.

Установите процедуру-перехватчик JournalRecordProc , указав тип WH_JOURNALRECORD и указатель на процедуру перехватчика в вызове функции SetWindowsHookEx .

Процедура перехватчика JournalRecordProc не должна быть в динамической библиотеке ссылок. Процедура-перехватчик JournalRecordProc может жить в самом приложении.

В отличие от большинства других глобальных процедур перехватчика, процедуры перехватчика JournalRecordProc и JournalPlaybackProc всегда вызываются в контексте потока, задающего перехватчик.

Приложение, которое установило процедуру перехватчика JournalRecordProc, должно watch для VK_CANCEL кода виртуального ключа (который реализуется в виде сочетания клавиш CTRL+BREAK на большинстве клавиатур). Этот код виртуального ключа должен интерпретироваться приложением как сигнал о том, что пользователь хочет прекратить запись журнала. Приложение должно ответить, завершив последовательность записи и удалив процедуру перехватчика JournalRecordProc . Удаление важно. Это предотвращает блокировку системы приложением журнала, висящим внутри процедуры перехватчика.

Эта роль в качестве сигнала для остановки записи journl означает, что сочетание клавиш CTRL+BREAK само по себе не может быть записано. Так как сочетание клавиш CTRL+C не имеет такой роли, как сигнал журнала, его можно записать. Есть еще два сочетания клавиш, которые не могут быть записаны: CTRL+ESC и CTRL+ALT+DEL. Эти два сочетания клавиш приводят к тому, что система останавливает все действия в журнале (запись или воспроизведение), удаляет все обработчики журнала и отправляет WM_CANCELJOURNAL сообщение в приложение для логирования.

См. также раздел

CallNextHookEx

EVENTMSG

JournalPlaybackProc

SetWindowsHookEx

WM_CANCELJOURNAL

Обработчики