SetWindowsHookEx(WH_KEYBOARD)仅产生第一个事件,顺序事件

时间:2011-03-10 18:48:58

标签: c# winapi interop

从.net应用程序我希望全局捕获所有键盘事件。

我使用win32-method SetWindowsHookEx(WH_KEYBOARD, HINSTANCE)设置回调。 (使用dllimport和一些mashall-call。)

按下第一个键,我得到了一个很好的回答,说明按下了哪个键 我的回调函数应该调用CallNextHookEx 但是在第一次活动之后,我没有得到更多的活动。

任何人都知道事件的常见原因会停止吗?

2 个答案:

答案 0 :(得分:2)

托管包装器不支持

WH_KEYBOARD,它需要将自身注入进程。

您可以使用将在声明线程中调用的WH_KEYBOARD_LL

请参阅:http://support.microsoft.com/kb/318804

  

不支持全局挂钩   .NET Framework除外   WH_KEYBOARD_LL低级钩子和   WH_MOUSE_LL低级钩子,你不能   实现全局钩子   Microsoft .NET Framework。安装一个   全局钩子,钩子必须有本机   DLL导出将自己注入另一个   需要有效的流程,   调用的一致功能。这个   行为需要DLL导出。该   .NET Framework不支持DLL   出口。托管代码没有概念   一个函数的一致值   指针因为这些功能   指针是构建的代理   动态。

     

调用低级挂钩过程   在安装钩子的线程上。   低级挂钩不需要这样   钩子程序在一个实现   DLL。

答案 1 :(得分:1)

如果您的钩子回调函数需要太长时间才能返回,Windows将停止调用它以保持系统性能。尝试一下对OutputDebugString和CallNextHookEx的简单调用,看看是否有帮助......