开发者

Detecting multiple simultaneous keypresses in C#

开发者 https://www.devze.com 2022-12-08 07:24 出处:网络
I am looking to emulate hyperterminal functionality for my Serial Communication in C# by detecting the keypresses of certain key combinations (escape sequences) which cannot be typed out such as Ctrl+

I am looking to emulate hyperterminal functionality for my Serial Communication in C# by detecting the keypresses of certain key combinations (escape sequences) which cannot be typed out such as Ctrl+C, Ctrl+Z, etc. I understand that these keys have their ASCII equivalents and can be transmitted as such. But I am facing problems with the detection of multiple keypresses. Some of my code is provided as a reference :

private void Transmitted_KeyDown(object sender, KeyEventArgs e)
{


   if (e.Modifiers 开发者_C百科== 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());

   }
} 


If you're looking for regular keys then you can store them in a list: On KeyDown, add the key to a list. On Key Up, remove it from the list. On KeyDown, check what's in the list.

However, I'm not sure that there are keydown/keyup events for modifier keys like ctrl, shift, alt. For those you can do something like this:

bool CtrlDown = ((e.Modifiers & Keys.Control) > 0);
bool CtrlOnlyModifierDown = ((e.ModifierKeys & Keys.Control) == Keys.Control) 


e.KeyCode contains the key value + modifier info

e.KeyCode = e.KeyValue | e.Modifiers

Use e.KeyCode


Not sure if you have had any luck.

But try this code:

        switch (e.KeyData)
        {
            case Keys.Control:
                {
                    if (e.KeyData == Keys.Subtract) 
                    { }
                    else if (e.KeyData == Keys.C) 
                    { }
                    break;
                }
        }
0

精彩评论

暂无评论...
验证码 换一张
取 消