JournalPlaybackProc 函数

说明

警告

从 Windows 11 开始,日记挂钩 API 不受支持,将在将来的版本中删除。 因此,强烈建议改为调用 SendInput TextInput API。

SetWindowsHookExA SetWindowsHookExW函数一起使用的应用程序定义或库定义的回调函数。/ 函数记录系统从系统消息队列中删除的消息。 稍后,应用程序可以使用 JournalPlaybackProc 挂钩过程来播放消息。

注意

通常,应用程序使用此函数播放 JournalRecordProc 挂钩过程之前记录的一系列鼠标和键盘消息。 只要安装了 JournalPlaybackProc 挂钩过程,将禁用常规鼠标和键盘输入。

HOOKPROC 类型定义指向此回调函数的指针。 JournalRecordProc 是应用程序定义的函数名称或库定义的函数名称的占位符。

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

参数

代码 [in]

类型: int

挂钩过程用于确定如何处理消息的代码。

如果 代码 小于零,挂钩过程必须将消息传递给 CallNextHookEx 函数,而无需进一步处理,并且应返回 CallNextHookEx 返回的值。

此参数的取值可为下列值之一:

含义
HC_GETNEXT 1 挂钩过程必须将当前鼠标或键盘消息复制到 lParam 参数指向的 EVENTMSG 结构。
HC_NOREMOVE 3 应用程序调用了 PeekMessage 函数,并将 wRemoveMsg 设置为 PM_NOREMOVE,指示在 PeekMessage 处理后不会从消息队列中删除该消息。
HC_NOREMOVE 2 挂钩过程必须准备将下一个鼠标或键盘消息复制到 lParam 指向的 EVENTMSG 结构。 收到 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 ,依此而过。 系统似乎没有响应。

与大多数其他全局挂钩过程不同, JournalRecordProcJournalPlaybackProc 挂钩过程始终在设置挂钩的线程上下文中调用。

在挂钩过程将控制权返回给系统后,将继续处理该消息。 如果代码HC_SKIP,挂钩过程必须准备在其下一次调用中返回下一个记录的事件消息。

通过在调用 SetWindowsHookEx 函数时指定WH_JOURNALPLAYBACK类型和指向挂钩过程的指针来安装 JournalPlaybackProc 挂钩过程。

如果用户在日记播放期间按 CTRL+ESC 或 CTRL+Alt+DEL,系统将停止播放、取消日志播放过程,并将 WM_CANCELJOURNAL 消息发布到日记应用程序。

如果挂钩过程返回WM_KEYFIRST WM_KEYLAST范围内的消息,则以下条件适用:

  • EVENTMSG 结构的 paramL 成员指定按下的键的虚拟键代码。
  • EVENTMSG 结构的 paramH 成员指定扫描代码。
  • 无法指定重复计数。 事件始终用于表示一个关键事件。

另请参阅

CallNextHookEx

EVENTMSG

JournalRecordProc

PeekMessage

SetWindowsHookEx

WM_CANCELJOURNAL

挂钩