Я хочу подражать гипертерминальной функциональности для моей последовательной связи на С#, обнаружив нажатия клавиш определенных комбинаций клавиш (escape-последовательностей), которые невозможно напечатать, например 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());
}
}
Если вы ищете обычные ключи, вы можете сохранить их в списке: В KeyDown добавьте ключ в список. В Key Up удалите его из списка. В KeyDown проверьте, что в списке.
Однако я не уверен, что есть клавиши keydown/keyup для клавиш-модификаторов, таких как ctrl, shift, alt. Для них вы можете сделать что-то вроде этого:
bool CtrlDown = ((e.Modifiers & Keys.Control) > 0);
bool CtrlOnlyModifierDown = ((e.ModifierKeys & Keys.Control) == Keys.Control)
e.KeyCode
содержит информацию о значении ключа + модификатора
e.KeyCode = e.KeyValue | e.Modifiers
Используйте e.KeyCode
Не уверен, что вам повезло.
Но попробуйте этот код:
switch (e.KeyData)
{
case Keys.Control:
{
if (e.KeyData == Keys.Subtract)
{ }
else if (e.KeyData == Keys.C)
{ }
break;
}
}