2

我希望通过检测某些无法键入的键组合(转义序列)的按键来模拟 C# 中的串行通信的超级终端功能,例如 Ctrl+C、Ctrl+Z 等。我知道这些键有它们的 ASCII等价物并且可以这样传输。但是我在检测多个按键时遇到了问题。我的一些代码作为参考提供:

private void Transmitted_KeyDown(object sender, KeyEventArgs e)
{


   if (e.Modifiers == Keys.Control || e.Modifiers== Keys.Shift || e.Modifiers==Keys.Alt)
   {
       var test = (char)e.KeyValue; // Only able to detect a single keypress!


       ComPort.Write(test.ToString());

   }
} 
4

3 回答 3

6

如果您正在寻找常规密钥,则可以将它们存储在列表中:在 KeyDown 上,将密钥添加到列表中。在 Key Up 时,将其从列表中删除。在 KeyDown 上,检查列表中的内容。

但是,我不确定 ctrl、shift、alt 等修饰键是否存在 keydown/keyup 事件。对于那些你可以做这样的事情:

bool CtrlDown = ((e.Modifiers & Keys.Control) > 0);
bool CtrlOnlyModifierDown = ((e.ModifierKeys & Keys.Control) == Keys.Control) 
于 2009-10-09T15:38:11.887 回答
2

e.KeyCode包含键值 + 修饰符信息

e.KeyCode = e.KeyValue | e.Modifiers

利用e.KeyCode

于 2009-10-09T15:43:34.513 回答
0

不知道你有没有运气。

但试试这段代码:

        switch (e.KeyData)
        {
            case Keys.Control:
                {
                    if (e.KeyData == Keys.Subtract) 
                    { }
                    else if (e.KeyData == Keys.C) 
                    { }
                    break;
                }
        }
于 2012-08-22T06:57:15.787 回答