C# 检查是否按下了3个键
我正在用Visual Studio 2010制作一个C#应用程序。它是一个Windows窗体应用程序 我想做的是在按下3个键时触发一个函数。这些键是CTRL、SHIFT和X 我现在有这个代码: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:
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”