检测在 C# 控制台应用程序中按下的组合键
Detect key combination being pressed in C# console app
我有一个非常简单的控制台应用程序,它静静地等待用户按下一个键,然后根据按下的键执行操作。我遇到了一些问题,但 上的一些有用的用户指出了我哪里出错了。
我目前必须处理单个按键的代码如下
ConsoleKey key;
do
{
while (!Console.KeyAvailable)
{
// Do something, but don't read key here
}
// Key is available - read it
key = Console.ReadKey(true).Key;
if (key == ConsoleKey.NumPad1)
{
Console.WriteLine(ConsoleKey.NumPad1.ToString());
}
else if (key == ConsoleKey.NumPad2)
{
Console.WriteLine(ConsoleKey.NumPad2.ToString());
}
} while (key != ConsoleKey.Escape);
我想知道如何检测何时按下了 2 个或更多键的组合。我不是在谈论标准 Ctrl + c,而是 Ctrl + NumPad1。如果用户按下 Ctrl + NumPad1,执行操作 X
.
我真的不确定该怎么做,因为当前的 while
循环只会循环直到按下一个键,所以不会检测到第二个键(假设它几乎不可能按下同时使用两个键。
是否有人能够提供正确方向的指导以帮助实现这一目标?
我猜你需要检查 key modifier。检查下面的伪代码:
ConsoleKeyInfo keyInfo = Console.ReadKey();
Console.WriteLine(keyInfo.Key);
Console.WriteLine(keyInfo.Modifier);
...
if((keyInfo.Modifiers & ConsoleModifiers.Control) != 0) Console.WriteLine("CTL+");
如果捕获 ConsoleKeyInfo
,您将获得其他信息,包括 Modifiers
键。您可以查询此以查看是否按下了 Control 键:
ConsoleKey key;
do
{
while (!Console.KeyAvailable)
{
// Do something, but don't read key here
}
// Key is available - read it
var keyInfo = Console.ReadKey(true);
key = keyInfo.Key;
if ((keyInfo.Modifiers & ConsoleModifiers.Control) != 0)
{
Console.Write("Ctrl + ");
}
if (key == ConsoleKey.NumPad1)
{
Console.WriteLine(ConsoleKey.NumPad1.ToString());
}
else if (key == ConsoleKey.NumPad2)
{
Console.WriteLine(ConsoleKey.NumPad2.ToString());
}
} while (key != ConsoleKey.Escape);
我有一个非常简单的控制台应用程序,它静静地等待用户按下一个键,然后根据按下的键执行操作。我遇到了一些问题,但
我目前必须处理单个按键的代码如下
ConsoleKey key;
do
{
while (!Console.KeyAvailable)
{
// Do something, but don't read key here
}
// Key is available - read it
key = Console.ReadKey(true).Key;
if (key == ConsoleKey.NumPad1)
{
Console.WriteLine(ConsoleKey.NumPad1.ToString());
}
else if (key == ConsoleKey.NumPad2)
{
Console.WriteLine(ConsoleKey.NumPad2.ToString());
}
} while (key != ConsoleKey.Escape);
我想知道如何检测何时按下了 2 个或更多键的组合。我不是在谈论标准 Ctrl + c,而是 Ctrl + NumPad1。如果用户按下 Ctrl + NumPad1,执行操作 X
.
我真的不确定该怎么做,因为当前的 while
循环只会循环直到按下一个键,所以不会检测到第二个键(假设它几乎不可能按下同时使用两个键。
是否有人能够提供正确方向的指导以帮助实现这一目标?
我猜你需要检查 key modifier。检查下面的伪代码:
ConsoleKeyInfo keyInfo = Console.ReadKey();
Console.WriteLine(keyInfo.Key);
Console.WriteLine(keyInfo.Modifier);
...
if((keyInfo.Modifiers & ConsoleModifiers.Control) != 0) Console.WriteLine("CTL+");
如果捕获 ConsoleKeyInfo
,您将获得其他信息,包括 Modifiers
键。您可以查询此以查看是否按下了 Control 键:
ConsoleKey key;
do
{
while (!Console.KeyAvailable)
{
// Do something, but don't read key here
}
// Key is available - read it
var keyInfo = Console.ReadKey(true);
key = keyInfo.Key;
if ((keyInfo.Modifiers & ConsoleModifiers.Control) != 0)
{
Console.Write("Ctrl + ");
}
if (key == ConsoleKey.NumPad1)
{
Console.WriteLine(ConsoleKey.NumPad1.ToString());
}
else if (key == ConsoleKey.NumPad2)
{
Console.WriteLine(ConsoleKey.NumPad2.ToString());
}
} while (key != ConsoleKey.Escape);