适用于 .NET 的简单热键选择控件






4.50/5 (13投票s)
2006年8月7日
2分钟阅读

126843

3300
一篇展示了一个简单的热键选择控件的文章
引言
我正在编写一个应用程序,它为像 iTunes 这样本身不支持全局热键的媒体播放器添加了全局热键支持。
微软的热键控件(“msctls_hotkey32
”,或 HOTKEY_CLASS
)有一些限制。例如,它将许多现代键盘上的媒体按钮识别为字母。这可能看起来不是什么大问题——但在某些情况下确实如此。
我希望确保用户不会选择无效的热键,例如 Shift+<字母>(这并不是一个好主意,因为人们用键盘来……嗯,打字!)。使用微软的控件,这几乎是不可能的。虽然你可以告诉控件禁止此类热键,但由于它将媒体键视为普通字母,它也会强制对媒体键应用修饰键!如果使用键盘上的播放/暂停按钮需要同时按住 Ctrl+Alt,那有什么用呢?
这就是为什么我从头开始创建这个控件,而不是像我在我程序的早期版本中那样基于微软的控件。
示例应用程序
我提供了一个示例应用程序,以便你可以轻松地试用该控件,而无需构建自己的项目。该应用程序本身几乎没用,它允许你输入一个热键并将其复制到另一个 HotkeyControl
。尽管如此,它演示了所有必要的功能。
在你的项目中使用的控件
首先,与所有其他自定义控件一样,你需要添加对程序集的引用。为此,右键单击解决方案资源管理器窗口中的“引用”,然后选择“添加引用”。
转到“浏览”选项卡,然后双击 HotkeyControl.dll(在保存它的位置)。
要在图形设计器中使用它,你可能还需要将其添加到工具箱窗口中。右键单击工具箱中的空白区域,然后选择“选择项”。再次浏览到 HotkeyControl.dll,并确保在列表中选中“HotkeyControl
”(使用筛选器缩小范围)。该控件非常易于使用。在将 HotkeyControl
的实例添加到你的窗体(如果你愿意,可以使用 Windows 窗体设计器)后,你可以读取/设置控件的 Hotkey
和 HotkeyModifiers
属性来检索/设置热键。
private void btnSet_Click(object sender, EventArgs e)
{
hotkeyControl.Hotkey = Keys.F11;
hotkeyControl.HotkeyModifiers = Keys.Control | Keys.Alt;
}
private void btnShowHotkey_Click(object sender, EventArgs e)
{
MessageBox.Show("Hotkey modifiers: " + hotkeyControl.HotkeyModifiers.ToString()
+ Environment.NewLine + "Hotkey: " + hotkeyControl.Hotkey.ToString());
}
注释
与微软的控件一样,此控件仅允许你选择热键。它不提供实际注册和管理热键的方法。你必须自己编写这部分代码。在查阅 P/Invoke.NET 和 MSDN Library 中的 RegisterHotKey
和 UnregisterHotKey
之后,这应该不会太难。
如果很多人要求,我会考虑编写此类。
历史
- 2006 年 8 月 7 日 - 原始发布