我的应用程序的 ctrl 热键

Posted

技术标签:

【中文标题】我的应用程序的 ctrl 热键【英文标题】:ctrl hotkey for my application 【发布时间】:2011-04-17 00:36:39 【问题描述】:

我有一个 .net C# winforms 应用程序,我需要添加热键支持,但我想要的不仅仅是标准的RegisterHotKey 功能,我希望能够支持像 ctrl-ctrl(就像在 Google 桌面中一样)。

请告诉我如何实现这一点。

编辑:

你没看错。 即使我的应用程序没有聚焦,我也希望热键能够工作,例如最小化到托盘。

【问题讨论】:

【参考方案1】:

您可以通过轮询Console.KeyAvailable 然后使用Console.ReadKey 读取来获取单个键(如 ctrl 键),但这不会告诉您他们何时松开键。您可能必须捕获WM_KEYDOWN 消息并在每个键处调用GetAsyncKeyState,以便确定哪些特殊键(控制、移位、alt 等)当前处于关闭状态。

至少,那是我记得在写游戏时所做的事情。

【讨论】:

【参考方案2】:

如果您使用的是 winforms 和 c#,则最好使用 keydown 或 keypress 事件。并在表单上的模块级变量中记录以前的按键。 然后,当用户按下 ctl 时,会触发一个 keypress 事件,然后您查看之前的 keypress 值,如果这也是 ctl,那么您已经找到了您正在寻找的组合键。

【讨论】:

【参考方案3】:

您可能必须安装keyboard hook。现在 .NET 4.0 支持将多个版本的 CLR 加载到单个进程中,这已经不像以前那么糟糕了,但仍然不受欢迎。

【讨论】:

键盘挂钩非常好,直到涉及将我的程序检测为键盘记录器的防病毒和安全产品:-(

以上是关于我的应用程序的 ctrl 热键的主要内容,如果未能解决你的问题,请参考以下文章

如何使用winforms创建自定义热键

WPF中的全局热键?

Swing 中的本地化加速器(JMenuItem 热键)

使用 C# 设置全局热键

使用 C# 设置全局热键

delphi 如何屏蔽win98和winme下的系统热键alt+f4,ctrl+