【问题标题】:Check to see if 3 keys are pressed检查是否按下了 3 个键
【发布时间】:2012-11-12 05:42:42
【问题描述】:

我正在使用 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.");
            }
        }

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

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

【问题讨论】:

    标签: c# keypress hotkeys


    【解决方案1】:

    在 CTRL+SHIFT+X 的情况下,只有 X 才是真正的正确键;其他的是“修饰符”键。所以无需打破 P/Invoke :-) 只需在 Key_Down 处理程序中执行此操作即可:

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

    【讨论】:

    • 谢谢你,经过一天的头撞墙...不敢相信它这么简单。将在可能的情况下接受答案
    • 很高兴我能帮上忙。在一般的三键情况下(键不是修饰符),您可以通过查看 KeyDown 和 KeyUp 中的 e.KeyCode 来保持您感兴趣的键的状态;那么如果所有三个都被按下,当最后一个被按下时,你会知道其他人是否更早被按下(并且仍然没有被释放)。
    • 感谢您提供的最后一条额外信息 ^^
    • 谢谢!在 VB.NET 上工作到“如果 e.KeyCode = Keys.X And​​Also e.Control AndAlso e.Shift Then End If”
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-15
    • 2023-03-03
    • 1970-01-01
    • 2016-10-31
    • 2017-05-26
    • 2018-05-02
    相关资源
    最近更新 更多