如何打印按下哪些键?

时间:2013-02-13 07:04:47

标签: c# hotkeys

大多数使用热键的程序都允许用户查看实际被按下的键,但我不确定它是如何完成的。作为参考,请参阅随机程序的以下屏幕截图,该程序捕获按钮组合:

enter image description here

我该如何实现这样的东西?我正在阅读的事件属于System.Windows.Forms.KeyEventArgs类型。有许多键没有描述其实际值,而其他几个键具有不准确的值。除了找到每个密钥的代码并手动显示它们之外,没有解决方案吗?

编辑:为了澄清,我希望得到一个用户友好的字符串表示,按键被按下,如上面的屏幕截图所示。

4 个答案:

答案 0 :(得分:1)

该事件包含AltControlShift的bool属性。

KeyCode的类型为System.Windows.Forms.Keys。它具有[Flags]属性,但仅限AltControlShift。所有其他键都有常规值。

private void showKeys(object sender, KeyEventArgs e)
{
    List<string> keys = new List<string>();

    if (e.Control == true)
    {
        keys.Add("CTRL");
    }

    if (e.Alt == true)
    {
        keys.Add("ALT");
    }

    if (e.Shift == true)
    {
        keys.Add("SHIFT");
    }

    switch (e.KeyCode)
    {
        case Keys.ControlKey:
        case Keys.Alt:
        case Keys.ShiftKey:
        case Keys.Menu:
            break;
        default:
            keys.Add(e.KeyCode.ToString()
                .Replace("Oem", string.Empty)
                );
            break;
    }

    e.Handled = true;

    textBox1.Text = string.Join(" + ", keys);
}

答案 1 :(得分:0)

KeyEventArgs.KeyCode Property....

如果你可以使用javascript,你将拥有每个密钥的代码

Keycodes in javascript

我发现这对Keyeventargs.Keycode非常有趣 http://www.asquare.net/javascript/tests/KeyCode.html

答案 2 :(得分:0)

您可以通过此代码按下女巫键(按下单键或多键,将KeyPreview设置为true)

    private void Form1_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
    {
        label1.Text = null;
        label1.Text=e.Modifiers.ToString();
    }

答案 3 :(得分:0)

对于win-form,首先需要将属性KeyPreview设置为true。这样,即使其中一个表单的子节点具有焦点而表单本身没有焦点,也应该检测到按下的键。

然后,覆盖以下方法之一:OnKeyUpOnKeyDownOnKeyPress

protected override void OnKeyUp(KeyEventArgs e)
{
  switch (e.KeyCode)
  {
      case Keys.F1:
         showHelpTopics();
         break;
  }
}

如果您没有描述某些键,只需执行msdn搜索,您就会找到它的详细信息。