如何捕捉Ctrl键的双击事件?

3
我需要的功能类似于Google桌面。当您快速按两次Ctrl时,会弹出一个小搜索框。
我尝试使用一个相当复杂的键盘钩子类,但它一直给我带来不可预测的结果(例如第一次它可以正常工作,然后我按一次Ctrl,它会多次引发按键事件?)。
总之,这似乎不应该很复杂,所以我觉得我一定做错了什么。我的应用程序(一个WPF应用程序)将在主窗口的可见性设置为隐藏并且不驻留在任务栏中运行。当我执行Ctrl-Ctrl时,我想捕获它并显示窗口。
另一个副问题是,我目前通过注册热键来实现这一点,但这并不能给我想要的完整功能(即Ctrl的双击)。当窗口显示时,我还没有找到100%可靠的方法来检测它何时不再拥有焦点(当这种情况发生时,我想再次隐藏它)。我已经尝试响应Deactivated,LostFocus等...,它们大部分时间都有效。但有时似乎窗口显示而没有被激活或接收焦点。对此有什么想法吗?
谢谢! 亚当
2个回答

3
您可能需要使用SetWindowsHookEx来在低级别上挂钩键盘事件。
这里有一些C++示例代码,以及pinvoke.net的条目,这应该有助于将其移植到C#。
对于可直接使用的C#代码,您可以尝试这个CodeProject示例。据我记忆,在大多数情况下它都能正常工作,但存在一些错误。曾经我协助将其移植到Jad引擎中,我们实现了一个类(UserActivityHook)来完成这个任务,并在此过程中修复了一些错误。这可能是一个非常好的起点...

这个回答完全没有涉及问题中的双击方面。 - Synetech

2
关于第二个问题,如果在显示时表单未被激活,则应该在显示后调用Form.Activate。为了简单的调试,请在GotFocus、LostFocus、Enter、Exit和Activate、Deactivate事件中添加跟踪语句,并查看哪些事件符合您的需求。请注意保留HTML标签。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接