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;
}
}
精彩评论