2012-11-23 48 views
1

我做在C#應用程序中使用Visual Studio 2010中這是一個Windows窗體應用程序檢查3個鍵按下

我想要做的就是當按下3個按鍵來觸發的功能。鍵是CTRL,SHIFT和X

我有這個代碼現在:

private void Form1_KeyDown(object sender, KeyEventArgs e) 
     { 
      Console.WriteLine(e.KeyValue); 
      /* 
      *KeyValue: 
      *CTRL = 17 
      *Shift = 16 
      *X = 88 
      */ 
     } 

正如你所看到的,它很空。這是因爲我不知道它了。

我已經在互聯網上找到這段代碼,但不知道如何實現它:

[DllImport("user32.dll")] 
     public static extern int GetKeyboardState(byte[] keystate); 

     private void Form1_KeyDown(object sender, KeyEventArgs e) 
     { 
      byte[] keys = new byte[255]; 

      GetKeyboardState(keys); 

      if (keys[(int)Keys.Up] == 129 && keys[(int)Keys.Right] == 129) 
      { 
       Console.WriteLine("Up Arrow key and Right Arrow key down."); 
      } 
     } 

所以我給你們的問題是,我怎麼能檢查所有的樹鑰匙同時按下?

或者如果你知道一個更好的方法來製作這樣一個熱鍵,那會怎麼樣呢?

回答

7

在CTRL + SHIFT + X的情況下,只有X確實是一個合適的鍵;其他人是「修飾」鍵。所以沒必要打出來的的P/Invoke :-)只是這樣做在你的key_down的處理程序:

if (e.KeyCode == Keys.X && e.Control && e.Shift) { 
    // CTRL+SHIFT+X was pressed! 
} 
+1

謝謝,靠在牆上撞頭的後一天......不能相信就這麼簡單。將在可能時接受答案 – Mathlight

+2

很高興我能幫到你。在一般的三鍵情況下(鍵不是修飾鍵),你可以通過觀察KeyDown和KeyUp中的e.KeyCode來維護你感興趣的鍵的狀態;那麼如果所有三個人都被按下,當最後一個人被按下時,你會知道其他人是否被按下(並且還沒有被釋放)。 – Cameron

+1

謝謝你最後一塊額外的信息^^ – Mathlight