检查是否按下了3个键

Mat*_*ght 1 c# hotkeys keypress

我正在使用Visual Studio 2010在C#中创建应用程序.它是一个Windows窗体应用程序

我想要做的是按下3个键时触发一个功能.键是CTRL,SHIFT和X.

我现在有这个代码:

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

正如你所看到的,它非常空洞.这是因为我不知道了.

我在互联网上找到了这段代码,但不知道如何实现它:

[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.");
            }
        }
Run Code Online (Sandbox Code Playgroud)

所以我的问题是,我如何检查是否同时按下所有树键?

或者如果你知道一个更好的方法来制作这样一个热键,那会是多少?

Cam*_*ron 7

在CTRL + SHIFT + X的情况下,只有X才是正确的密钥; 其他是"修饰符"键.所以不需要打破P/Invoke :-)只需在Key_Down处理程序中执行此操作:

if (e.KeyCode == Keys.X && e.Control && e.Shift) {
    // CTRL+SHIFT+X was pressed!
}
Run Code Online (Sandbox Code Playgroud)

  • 很高兴我能帮助你.在一般的三键情况下(键不是修饰符),你可以通过在KeyDown和KeyUp中观察e.KeyCode来保持你感兴趣的键的状态.然后,如果按下所有三个按钮,当按下最后一个按钮时,您将知道其他按钮是否被按下(并且仍未释放). (2认同)