调用 SetWindowsHookEx 指向的方法

calling the method pointed to by SetWindowsHookEx

本文关键字:方法 SetWindowsHookEx 调用      更新时间:2023-10-16
HHOOK WINAPI SetWindowsHookEx(
 __in  int idHook,
 __in  HOOKPROC lpfn,
 __in  HINSTANCE hMod,
 __in  DWORD dwThreadId
);

正如文档所说,lpfn是指向钩子过程的指针。让钩子过程是:

keyboardProcessing(.....) {
}

如何调用此钩子过程?即使我调用此钩子过程,我将如何接收击键?

请解释SetWindowsHookEx是如何工作的,以及它如何调用实际的程序员定义的钩子方法来处理密钥?

SetWindowsHookEx 函数用于为某些 Windows 事件注册自定义处理程序。从 MSDN:

将应用程序定义的挂钩过程安装到挂钩链中。您将安装挂钩过程来监视系统中某些类型的事件。这些事件与特定线程或与调用线程位于同一桌面中的所有线程相关联。

这意味着,对于选定的挂钩类型(例如键盘事件),Windows将调用提供的过程(lpfn)来通知发生了该类型的事件。例如,您可以使用它从键盘获取所有事件,即使它们没有定向到您的应用程序窗口(想象一下编写宏录制器)。

如何调用此钩子过程?

您不必调用该过程,您将在对SetWindowsHookEx的调用中提供其地址,然后 Windows 将在需要时为您调用它。

即使我调用此钩子过程,我将如何接收击键?

如前所述,您不必调用它,如果您为WH_KEYBOARD注册了一个挂钩,则 Windows 将为每个键盘事件调用该过程。不要忘记致电CallNextHookEx在您的过程中,Hook 是一个过程链,每个过程负责调用链中的下一个过程。最后,在使用 UnhookWindowsHookEx 退出应用程序之前释放钩子。