Функция 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 сообщение в приложение для логирования.