2009-10-09 101 views
2

我期待通過檢測特定鍵的組合(轉義序列),其不能被輸入瞭如Ctrl + C鍵,Ctrl + Z等的按鍵來模擬超級終端功能爲我在C#串行通信。我知道這些鍵有它們的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()); 

    } 
} 

回答

6

如果您正在尋找正規鍵,那麼你可以將它們存儲在列表:在的KeyDown,添加的關鍵列表。在按鍵上,將其從列表中刪除。在KeyDown上,檢查列表中的內容。

但是,我不知道有KEYDOWN/KEYUP事件修飾鍵如Ctrl,移位,ALT。對於那些你可以做這樣的事情:

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

我如何將能夠以這樣的方式來檢測鍵組合? – Recursive 2009-10-10 02:55:34

2

e.KeyCode包含鍵值(+)修飾符信息

e.KeyCode = e.KeyValue | e.Modifiers 

使用e.KeyCode

+0

e.Keycode仍然無法正常工作。當我按Ctrl + C我只是讀C的ASCII值,而不是整個序列。 – Recursive 2009-10-09 16:01:44

0

不知道,如果你有任何運氣。

但試試這個代碼:

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