Страница 12 из 34
Функция JournalPlaybackProc (ПроцедураВоспроизведенияПротокола) Подключаемая процедура JournalPlaybackProc - функция повторного вызова, которая вставляет сообщения от мыши и клавиатуры в системную очередь сообщений. Как правило, прикладная программа использует эту фильтр - процедуру, чтобы воспроизвести ряд сообщений мыши и клавиатуры, предварительно записанных подключаемой процедурой JournalRecordProc. Пока устанавливается фильтр - процедура JournalPlaybackProc, ввод данных от обычной мыши и от клавиатуры заблокирован. Синтаксис LRESULT CALLBACK JournalPlaybackProc ( int code,// код hook-точки WPARAM wParam,// не определяется LPARAM lParam// адрес обрабатываемого сообщения );
Параметры code Определяет код, который подключаемая процедура использует, чтобы определить, как обрабатывать сообщение. Этот параметр может быть одно из следующих значений: - HC_GETNEXT - Подключаемая процедура должна копировать текущее сообщение от мыши или клавиатуры в структуре EVENTMSG, указанной параметром lParam.
- HC_NOREMOVE - Прикладная программа вызвала функцию PeekMessage с wRemoveMsg установленным в PM_NOREMOVE, указывая этим, что сообщение не удалено из очереди сообщений после обработки PeekMessage.
- HC_SKIP - Подключаемая процедура должна приготовиться копировать следующее сообщение от мыши или клавиатуры в структуре EVENTMSG, указанной lParam. После приема кода HC_GETNEXT, фильтр - процедура должна скопировать сообщение в структуру.
- HC_SYSMODALOFF - Системно - модальное диалоговое окно было разрушено. Подключаемая процедура должна продолжить воспроизводить сообщения.
- HC_SYSMODALON - Системно - модальное диалоговое окно отображается на экране. Пока блок диалога не разрушен, подключаемая процедура должна прекратить воспроизводить сообщения.
Если code - меньше чем нуль, подключаемая процедура должна передать сообщение в функцию CallNextHookEx без дальнейшей обработки и должна возвратить значение, возвращенное CallNextHookEx. wParam Устанавливается в значение ПУСТО (NULL). lParam Указывает на структуру EVENTMSG, которая предоставляет сообщение, обрабатываемое подключаемой процедурой. Этот параметр допустим, только тогда, когда параметра code равен HC_GETNEXT. Возвращаемые значения Чтобы заставить систему ждать перед обработкой сообщения, величина возвращаемого значения должна быть количеством времени, в тактах системных часов, количество которых система должна ждать. (Это значение может быть подсчитано, путем вычисления разности между членами time текущего и предыдущего входящих сообщений.) Чтобы обработать сообщение немедленно, величина возвращаемого значения должна быть нулевая. Величина возвращаемого значения используется, только тогда, если код hook-точки - HC_GETNEXT; иначе, она игнорируется. Замечания Подключаемая процедура JournalPlaybackProc должна копировать входящее сообщение в параметр lParam. Сообщение, должно быть предварительно записано при помощи использования фильтр - процедуры JournalRecordProc, которая не должна изменять сообщение. Чтобы извлекать то же самое сообщение снова и снова, подключаемая процедура может быть вызвана несколько раз с параметром code установленным в HC_GETNEXT без промежуточного вызова code установленным в HC_SKIP. Если code - HC_GETNEXT и величина возвращаемого значения больше чем нуль, система бездействует количество миллисекунд, заданных величиной возвращаемого значения. Когда система продолжит свою работу, она снова вызывает подключаемую процедуру с установкой code в HC_GETNEXT, чтобы извлечь то же самое сообщение. Величина возвращаемого значения этого нового вызова JournalPlaybackProc должна быть нулевая; иначе, система возвратится в состояние бездействия на число миллисекунд, заданных величиной возвращаемого значения, вызовет JournalPlaybackProc снова, и так далее по кругу. Система, будет находиться в состоянии зависания. В отличие от большинства других глобальных подключаемых процедур, фильтр - процедуры JournalRecordProc и JournalPlaybackProc всегда вызываются в контексте потока, который устанавливает hook-точку. После возвращения фильтр - процедурой управления системе, сообщение продолжает обрабатываться. Если code - HC_SKIP, подключаемая процедура должна приготовиться возвратить следующее зарегистрированное сообщение о событии при своем следующем вызове. Прикладная программа устанавливает подключаемую процедуру JournalPlaybackProc, путем определения типа hook-точки как WH_JOURNALPLAYBACK и адреса подключаемой процедуры при вызове функции SetWindowsHookEx. Подключаемая процедура Win32 JournalRecordProc не должна находиться в динамически компонуемой библиотеке. Подключаемая процедура Win32 JournalRecordProc может находиться непосредственно в прикладной программе. Если пользователь нажимает CTRL+ESC или CTRL+ALT+DEL в ходе воспроизведения протокола, система останавливает считывание, отцепляет процедуру считывания протокола и отсылает сообщение WM_CANCELJOURNAL в ведущую протокол прикладную программу. Если подключаемая процедура возвращает сообщение в диапазоне от WM_KEYFIRST до WM_KEYLAST, применяются следующие условия: - Член paramL структуры EVENTMSG определяет код виртуальной клавиши, которая была нажата.
- Член paramH структуры EVENTMSG определяет скэн-код.
- Не имеется никакого способа, чтобы определить повторный счет. Событие всегда принимается, чтобы предоставить одно событие связанное с клавишей.
JournalPlaybackProc - метка - заместитель для определяемого программой или определенного библиотекой имени функции. Смотри также CallNextHookEx, EVENTMSG, JournalRecordProc, PeekMessage, SetWindowsHookEx, WM_CANCELJOURNAL Размещение и совместимость JournalPlaybackProc Windows NTДа Win95Да Win32sДа Импортируемая библиотекаОпределяется пользователем Заголовочный файлwinuser.h UnicodeНет Замечания по платформеHOOKPROC |