【发布时间】:2011-03-10 18:48:58
【问题描述】:
我希望从 .net 应用程序全局捕获所有键盘事件。
我使用 win32 方法 SetWindowsHookEx(WH_KEYBOARD, HINSTANCE) 设置了回调。 (使用 dllimport 和一些 mashall-call。)
第一个键被按下时,我得到一个很好的响应,说明按下了哪个键。
我的回调函数按原样调用CallNextHookEx。
但是在第一个事件之后,我就没有更多的事件了。
有人知道事件停止发生的常见原因吗?
【问题讨论】:
-
最常见的原因是代码中的错误。
-
@Erik,不是真的......看我的回答。
-
我自己没有构建该功能,而是使用了这个:codeproject.com/KB/cs/globalhook.aspx
-
我实际上也尝试过使用那个库。但是后来我遇到了一个不同的问题。在我的 Win7-64 位二击键上,像 ü ñ 开始失效,变成 ¨u、^u 和 ~n。但这可能是一个不同的问题......
-
你应该注意的一件事是,从个人经验来看,大多数人使用 WH_KEYBOARD_LL 的地方都弄错了,要么他们没有足够快地为请求提供服务,要么服务它的线程死了,要么跨上下文的东西只是随机播放。如果我想要一些非常强大且影响最小的东西,我会在这里不受约束。注入 dll 或设备驱动程序都是重量更轻的选项。