3

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

我曾尝试使用我在某处找到的相当重的键盘钩子类,但这一直给我无法预测的结果(即第一次它会起作用,然后我会按Ctrl一次,它会引发几次按键事件?)。

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

另一个方面的问题 - 我目前正在通过注册一个热键来做到这一点,但这并没有给我我想要的全部功能(双击Ctrl)。当窗口显示时,我还没有找到一种 100% 万无一失的方法来检测它何时不再具有焦点(发生这种情况时我想再次隐藏它)。我已经尝试过对 Deactivated、LostFocus 等做出响应……而这些大部分时间都有效。但有时似乎显示的窗口没有实际被激活或接收焦点。对此也有任何想法吗?

谢谢!
亚当

4

2 回答 2

3

您可能希望使用SetWindowsHookEx在低级别挂钩键盘事件。

这是C++中的一些示例代码,这里是pinvoke.net 的条目,它应该有助于将其移植到 C#。

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

于 2009-06-10T21:26:18.413 回答
2

至于第二个问题,如果表单在显示时没有激活,你应该在显示后调用Form.Activate 。对于简单的调试,将跟踪语句放在 GotFocus、LostFocus、Enter、Exit 和 Activate、Deactivate 事件中,看看是否有任何一个始终满足您的需求。

于 2009-06-11T01:17:52.957 回答