Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 检查是否按下了3个键_C#_Keypress_Hotkeys - Fatal编程技术网

C# 检查是否按下了3个键

C# 检查是否按下了3个键,c#,keypress,hotkeys,C#,Keypress,Hotkeys,我正在用Visual Studio 2010制作一个C#应用程序。它是一个Windows窗体应用程序 我想做的是在按下3个键时触发一个函数。这些键是CTRL、SHIFT和X 我现在有这个代码: private void Form1_KeyDown(object sender, KeyEventArgs e) { Console.WriteLine(e.KeyValue); /* *KeyValue:

我正在用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
             */
         }
正如你所看到的,这里相当空旷。这是因为我已经不知道了

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

[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.");
            }
        }
所以我的问题是,我如何检查所有的树键是否同时按下


或者,如果你知道一种更好的方法来制作这样一个热键,那会比什么好呢?

在CTRL+SHIFT+X的情况下,只有X才是真正合适的键;其他是“修改器”键。因此,无需中断P/Invoke:-)只需在键向下处理程序中执行此操作:

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

在CTRL+SHIFT+X的情况下,只有X才是真正合适的键;其他是“修改器”键。因此,无需中断P/Invoke:-)只需在键向下处理程序中执行此操作:

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

谢谢你,在头撞墙一天后。。。真不敢相信这么简单。如果可能的话,我会接受你的回答。在一般的三键情况下(其中键不是修改器),您可以通过在KeyDown和keydup中查看e.KeyCode来保持感兴趣的键的状态;然后,如果三个按钮都被按下,当最后一个按钮被按下时,您将知道其他按钮是否被按下(但仍然没有释放)。感谢您提供最后一条额外信息^^^谢谢!在VB.NET上工作到“如果e.KeyCode=Keys.X和e.Control以及e.Shift,那么结束If”谢谢,在一天的撞墙之后。。。真不敢相信这么简单。如果可能的话,我会接受你的回答。在一般的三键情况下(其中键不是修改器),您可以通过在KeyDown和keydup中查看e.KeyCode来保持感兴趣的键的状态;然后,如果三个按钮都被按下,当最后一个按钮被按下时,您将知道其他按钮是否被按下(但仍然没有释放)。感谢您提供最后一条额外信息^^^谢谢!在VB.NET上工作到“如果e.KeyCode=Keys.X并同时执行e.Control和e.Shift,则结束If”