Функция JournalPlaybackProc

Описание

Предупреждение

API перехватчиков журналов не поддерживаются начиная с Windows 11 и будут удалены в будущем выпуске. Поэтому мы настоятельно рекомендуем вместо этого вызывать API SendInput TextInput.

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

Примечание

Как правило, приложение использует эту функцию для воспроизведения ряда сообщений мыши и клавиатуры, записанных ранее процедурой перехватчика JournalRecordProc . Если установлен обработчик JournalPlaybackProc , обычный ввод с помощью мыши и клавиатуры отключен.

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

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

Параметры

code [in]

Тип: int

Код, который используется процедурой перехватчика для определения способа обработки сообщения.

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

Этот параметр может принимать одно из указанных ниже значений.

Значение Значение
HC_GETNEXT 1 Процедура перехватчика должна скопировать текущее сообщение мыши или клавиатуры в структуру EVENTMSG , на которую указывает параметр lParam .
HC_NOREMOVE 3 Приложение вызывает функцию PeekMessage с параметром wRemoveMsg, для которого задано значение PM_NOREMOVE, указывая, что сообщение не удаляется из очереди сообщений после обработки PeekMessage .
HC_NOREMOVE 2 Процедура перехватчика должна подготовиться к копированию следующего сообщения мыши или клавиатуры в структуру EVENTMSG , на которую указывает lParam. После получения кода HC_GETNEXT процедура перехватчика должна скопировать сообщение в структуру .
HC_SYSMODALOFF 5 Системно-модальное диалоговое окно было уничтожено. Процедура перехватчика должна возобновить воспроизведение сообщений.
HC_SYSMODALON 4 Отображается системно-модальное диалоговое окно. До тех пор, пока диалоговое окно не будет уничтожено, процедура перехватчика должна прекратить воспроизведение сообщений.

wParam

Тип: WPARAM

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

lParam

Тип: LPARAM

Указатель на структуру EVENTMSG , представляющую сообщение, обрабатываемое процедурой перехватчика. Этот параметр действителен, только если параметр кодаHC_GETNEXT.

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

Тип: LRESULT

Чтобы система ждала перед обработкой сообщения, возвращаемым значением должно быть время ожидания системы в тактах часов.

(Это значение можно вычислить путем вычисления разницы между элементами времени в текущем и предыдущем входных сообщениях.)

Для немедленной обработки сообщения возвращаемое значение должно быть равным нулю. Возвращаемое значение используется только в том случае, если код перехватчика HC_GETNEXT; в противном случае он игнорируется.

Комментарии

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

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

Если кодHC_GETNEXT и возвращаемое значение больше нуля, система переходит в спящий режим на количество миллисекунд, указанное возвращаемым значением. Когда система продолжит работу, она снова вызывает процедуру перехватчика с кодом , для которого задано значение HC_GETNEXT для получения того же сообщения. Возвращаемое значение этого нового вызова JournalPlaybackProc должно быть равно нулю; В противном случае система снова перейдет в спящий режим на количество миллисекунд, указанное в возвращаемом значении, снова вызовет JournalPlaybackProc и т. д. Система, как представляется, не отвечает.

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

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

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

Если пользователь нажимает клавиши CTRL+ESC ИЛИ CTRL+ALT+DEL во время воспроизведения журнала, система останавливает воспроизведение, отключает процедуру воспроизведения журнала и отправляет WM_CANCELJOURNAL сообщение в приложение логирования.

Если процедура перехватчика возвращает сообщение в диапазоне WM_KEYFIRSTдля WM_KEYLAST, применяются следующие условия:

  • Член paramL структуры EVENTMSG задает код виртуального ключа нажатой клавиши.
  • Элемент paramH структуры EVENTMSG указывает код сканирования.
  • Количество повторов невозможно указать. Событие всегда принимается для представления одного ключевого события.

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

CallNextHookEx

EVENTMSG

JournalRecordProc

PeekMessage

SetWindowsHookEx

WM_CANCELJOURNAL

Обработчики