从.net应用程序我希望全局捕获所有键盘事件。
我使用win32-method SetWindowsHookEx(WH_KEYBOARD, HINSTANCE)
设置回调。 (使用dllimport和一些mashall-call。)
按下第一个键,我得到了一个很好的回答,说明按下了哪个键
我的回调函数应该调用CallNextHookEx
但是在第一次活动之后,我没有得到更多的活动。
任何人都知道事件的常见原因会停止吗?
答案 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的简单调用,看看是否有帮助......