如何双击Ctrl键?

时间:2009-06-10 21:00:56

标签: .net wpf winapi ctrl

我正在寻找的是与Google桌面类似的功能。当您快速点击 Ctrl 两次时,会弹出一个小搜索框。

我已经尝试过使用我在某个地方发现的相当重的键盘钩子类,但是它一直给出了不可预知的结果(即第一次它会起作用,然后我按 Ctrl 一次,然后它会多次提高按键事件?)。

无论如何,这似乎不应该是复杂的,所以我觉得我一定做错了。我的应用程序(WPF应用程序)将运行,主窗口的可见性设置为隐藏,而不是驻留在任务栏中。当我执行 Ctrl - Ctrl 时,我想抓住它并显示窗口。

另一个问题 - 我目前通过注册热键来做这件事,但这并没有给我我想要的全部功能(双击 Ctrl )。当窗口显示时,我没有找到100%防呆的方式来检测它何时不再有焦点(我想在发生这种情况时再次隐藏它)。我已经尝试过响应Deactivated,LostFocus等......而且这些工作大部分时间都在工作。但有时看起来窗口显示时没有实际被激活或接收焦点。关于这个的任何想法?

谢谢!
亚当

2 个答案:

答案 0 :(得分:3)

您可能希望使用SetWindowsHookEx来锁定低级别的键盘事件。

这是一些sample code in C++,这里是pinvoke.net's entry,它应该有助于将其移植到C#。

对于直接可用的C#代码,您可以尝试此CodeProject sample。从我的记忆中,它在大多数情况下都有效,但有一些错误。有一次,我协助将其移植到Jad引擎,在那里我们实现了一个完成此任务的类(UserActivityHook),并在此过程中修复了一些错误。这可能是一个非常好的开始......

答案 1 :(得分:2)

关于第二个问题,如果在显示时未激活表单,则应在显示后调用Form.Activate。对于简单的调试,将跟踪语句放在GotFocus,LostFocus,Enter,Exit和Activate中,停用事件并查看是否有任何一致性满足您的需求。