HHOOK WINAPI SetWindowsHookEx(
__in int idHook,
__in HOOKPROC lpfn,
__in HINSTANCE hMod,
__in DWORD dwThreadId
);
在此,doc表示lpfn
是指向钩子过程的指针。让钩子程序为:
keyboardProcessing(.....) {
}
我如何调用此钩子程序?即使我打电话给这个钩子程序我怎么才能收到击键?
请解释一下SetWindowsHookEx
函数是如何工作的,以及如何调用实际的程序员定义的钩子方法来处理密钥?
答案 0 :(得分:1)
SetWindowsHookEx函数用于为某些Windows事件注册自定义处理程序。来自MSDN:
将应用程序定义的挂钩过程安装到挂钩链中。您将安装一个钩子过程来监视系统中某些类型的事件。这些事件与特定线程或与调用线程在同一桌面中的所有线程相关联。
这意味着,对于选定的挂钩类型(例如,键盘事件),Windows将调用提供的过程(lpfn
)以通知发生该类型的事件。例如,您可以使用它来获取键盘上的所有事件,即使它们没有被定向到您的应用程序窗口(想象一下编写宏录制器)。
如何调用此挂钩程序?
您无需拨打该程序,您将在SetWindowsHookEx
的通话中提供其地址,然后Windows会在需要时为您拨打电话。
即使我打电话给这个钩子程序我怎么才能收到击键?
如上所述,您不必调用它,如果您为WH_KEYBOARD
注册了一个钩子,那么Windows将为每个键盘事件调用该过程。别忘了拨打CallNextHookEx
在你的程序中,hook是一个程序链,每个程序都负责调用链中的下一个程序。最后在使用UnhookWindowsHookEx退出应用程序之前释放挂钩。