检测在C#控制台应用程序中按下的组合键

时间:2017-10-26 18:35:08

标签: c# .net console-application listener keypress

我有一个非常简单的控制台应用程序,它静静地等待用户按下一个键,然后根据按下的键执行操作。我遇到了一些问题,但是this post上的一些有用的用户指出了我出错的地方。

我目前处理单键按下的代码如下

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);

我想知道当按下两个或更多键的组合时我怎么能检测到。我不是在谈论标准 Ctrl + c ,而是像 Ctrl + NumPad1 。如果用户按 Ctrl + NumPad1 ,请执行操作X

我真的不确定该怎么做,因为当前while循环只会循环直到按下一个键,所以不会检测到第二个键(假设它根本不可能按下两个键在同一时间。

是否有人能够为正确的方向提供指导以帮助实现这一目标?

2 个答案:

答案 0 :(得分:0)

我猜您需要查看key modifier。检查下面的伪代码:

ConsoleKeyInfo keyInfo = Console.ReadKey();
Console.WriteLine(keyInfo.Key);
Console.WriteLine(keyInfo.Modifier);
...
if((keyInfo.Modifiers & ConsoleModifiers.Control) != 0) Console.WriteLine("CTL+");

答案 1 :(得分:0)

如果您捕获uint_least32_t,您将获得其他信息,包括ConsoleKeyInfo键。您可以查询它以查看是否按下了 Control 键:

Modifiers