调用SetWindowsHookEx指向的方法

时间:2012-05-23 10:40:09

标签: c++ c windows winapi hook

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

在此,doc表示lpfn是指向钩子过程的指针。让钩子程序为:

keyboardProcessing(.....) {
}

我如何调用此钩子程序?即使我打电话给这个钩子程序我怎么才能收到击键?

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

1 个答案:

答案 0 :(得分:1)

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

  

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

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

  

如何调用此挂钩程序?

您无需拨打该程序,您将在SetWindowsHookEx的通话中提供其地址,然后Windows会在需要时为您拨打电话。

  

即使我打电话给这个钩子程序我怎么才能收到击键?

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