2012-11-23 46 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