【问题标题】:How do I hook in to a double-press of the Ctrl key?如何连接到双击 Ctrl 键?
【发布时间】:2009-06-10 21:00:55
【问题描述】:

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

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

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

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

谢谢!
亚当

【问题讨论】:

    标签: .net wpf winapi ctrl


    【解决方案1】:

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

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

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

    【讨论】:

    • 这个答案没有解决问题的双击方面根本
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-18
      • 1970-01-01
      • 2010-12-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多