【问题标题】:Detect key combination being pressed in C# console app检测在 C# 控制台应用程序中按下的组合键
【发布时间】:2017-10-26 18:35:07
【问题描述】:

我有一个非常简单的控制台应用程序,它安静地等待用户按下一个键,然后根据按下的键执行一个操作。我遇到了一些问题,但是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);

我想知道如何检测何时按下 2 个或更多键的组合。我不是在谈论标准的 Ctrl + c,而是像 Ctrl + NumPad1 这样的东西。如果用户按下 Ctrl + NumPad1,则执行操作X

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

有没有人能够指导正确的方向来帮助实现这一目标?

【问题讨论】:

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


    【解决方案1】:

    如果您捕获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);
    

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 2012-08-28
        • 2020-11-29
        • 2013-12-07
        • 1970-01-01
        • 2020-10-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多