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