7.5.1.9 - Функция JournalPlaybackProc

(ПроцедураВоспроизведенияПротокола)

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

Синтаксис

LRESULT CALLBACK JournalPlaybackProc
(
	int code,		// код hook-точки
	WPARAM wParam,	// не определяется
	LPARAM lParam	// адрес обрабатываемого сообщения
);

Параметры
code
Определяет код, который подключаемая процедура использует, чтобы определить, как обрабатывать сообщение. Этот параметр может быть одно из следующих значений:

Если 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, применяются следующие условия:

JournalPlaybackProc - метка - заместитель для определяемого программой или определенного библиотекой имени функции.

Смотри также
CallNextHookEx, EVENTMSG, JournalRecordProc, PeekMessage, SetWindowsHookEx, WM_CANCELJOURNAL

Размещение и совместимость JournalPlaybackProc

Windows NT			Да 
Win95				Да 
Win32s				Да 
Импортируемая библиотека		Определяется пользователем 
Заголовочный файл			winuser.h 
Unicode				Нет 
Замечания по платформе		HOOKPROC

Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Владимир Соковиков - 22.06.2002