我的应用程序的 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 热键的主要内容,如果未能解决你的问题,请参考以下文章