0
HHOOK WINAPI SetWindowsHookEx(
 __in  int idHook,
 __in  HOOKPROC lpfn,
 __in  HINSTANCE hMod,
 __in  DWORD dwThreadId
);

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

keyboardProcessing(.....) {
}

我如何调用这个钩子程序?即使我调用这个钩子程序,我将如何接收击键?

请解释SetWindowsHookEx功能如何以及它如何调用实际的程序员定义的钩子方法来处理键?

4

1 回答 1

1

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

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

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

我如何调用这个钩子程序?

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

即使我调用这个钩子程序,我将如何接收击键?

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

于 2012-05-23T10:49:49.973 回答