.net - 如何连接到双击 Ctrl 键?

标签 .net wpf winapi ctrl

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

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

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

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

谢谢!
亚当

最佳答案

您可能想要使用SetWindowsHookEx在低级别 Hook 键盘事件。

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

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

关于.net - 如何连接到双击 Ctrl 键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/978140/

相关文章:

Windows 位图 : BITMAPV5HEADER and BITMAPINFO compatible?

c# - 键盘焦点到 DataGrid

java - 如何使用 Java native 访问 (JNA) 映射回调函数

c# - 无法在 Visual Studio 2015 中加载文件或程序集 'System.Memory, Version=4.0.1.'

c# - 为什么我不能将 ToList() 与我的 KeyCollection 一起使用

c# - 如何确定程序集名称是否与请求的部分程序集名称匹配

c# - 保存后在我的 XML 文件的开头获取 ""()

wpf - wpf 中最简单的按钮位置动画是什么?

wpf - 担心 WPF。我应该为 Windows GUI 使用 WPF 还是其他库?

delphi - Windows 8 中的对话框向左上方移动