65.9K
CodeProject 正在变化。 阅读更多。
Home

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

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.50/5 (13投票s)

2006年8月7日

2分钟阅读

viewsIcon

126843

downloadIcon

3300

一篇展示了一个简单的热键选择控件的文章

Sample Image - hotkeycontrol.png

引言

我正在编写一个应用程序,它为像 iTunes 这样本身不支持全局热键的媒体播放器添加了全局热键支持。

微软的热键控件(“msctls_hotkey32”,或 HOTKEY_CLASS)有一些限制。例如,它将许多现代键盘上的媒体按钮识别为字母。这可能看起来不是什么大问题——但在某些情况下确实如此。

我希望确保用户不会选择无效的热键,例如 Shift+<字母>(这并不是一个好主意,因为人们用键盘来……嗯,打字!)。使用微软的控件,这几乎是不可能的。虽然你可以告诉控件禁止此类热键,但由于它将媒体键视为普通字母,它也会强制对媒体键应用修饰键!如果使用键盘上的播放/暂停按钮需要同时按住 Ctrl+Alt,那有什么用呢?

这就是为什么我从头开始创建这个控件,而不是像我在我程序的早期版本中那样基于微软的控件。

示例应用程序

我提供了一个示例应用程序,以便你可以轻松地试用该控件,而无需构建自己的项目。该应用程序本身几乎没用,它允许你输入一个热键并将其复制到另一个 HotkeyControl。尽管如此,它演示了所有必要的功能。

在你的项目中使用的控件

首先,与所有其他自定义控件一样,你需要添加对程序集的引用。为此,右键单击解决方案资源管理器窗口中的“引用”,然后选择“添加引用”。

转到“浏览”选项卡,然后双击 HotkeyControl.dll(在保存它的位置)。

要在图形设计器中使用它,你可能还需要将其添加到工具箱窗口中。右键单击工具箱中的空白区域,然后选择“选择项”。再次浏览到 HotkeyControl.dll,并确保在列表中选中“HotkeyControl”(使用筛选器缩小范围)。

该控件非常易于使用。在将 HotkeyControl 的实例添加到你的窗体(如果你愿意,可以使用 Windows 窗体设计器)后,你可以读取/设置控件的 HotkeyHotkeyModifiers 属性来检索/设置热键。

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.NETMSDN Library 中的 RegisterHotKey UnregisterHotKey 之后,这应该不会太难。
如果很多人要求,我会考虑编写此类。

历史

  • 2006 年 8 月 7 日 - 原始发布
© . All rights reserved.