如何检查控制台应用程序中是否按下CTRL键c#

问题描述:

我要开始控制台应用程序。问题是如何确定CTRL键是否单独按下而没有任何其他键。如何检查控制台应用程序中是否按下CTRL键c#

using System; 
using System.Text; 

public class ConsoleKeyExample 
{ 
    public static void Main() 
    { 

     ConsoleKeyInfo input; 
     do 
     { 
      input = Console.ReadKey(true); 
      StringBuilder output = new StringBuilder(String.Format("You pressed {0}",input.Key.ToString())); 

      Console.WriteLine(output.ToString()); 
      if ((input.Modifiers & ConsoleModifiers.Control) != 0) 
      { 
       Console.WriteLine("CTRL Pressed"); 
      } 
     } while (input.Key != ConsoleKey.Escape); 
    } 
    } 

我想监视CTRL键的行为。在跟踪这段代码之后,我把一个检查点放在了readkey行上。但是当我按CTRL时,什么也没有发生,但是当我按下任何其他键如“K”时,它开始从键盘读钥匙

+0

控制台应用程序依赖于输入流,所以,除非一些实际的字符被插入到流中无法检测按键。 –

+0

我必须做什么,我需要监视控制台应用程序中的CTRL键行为 – Nautilus

+0

不幸的是,我不认为有办法做到这一点,而无需P/Invoke到Windows API并使用它来监视按键。就像我所说的,控制台应用程序的主要输入源是输入流,除非按键将字符放入输入流中,否则我不知道如何去检测它。 –

是的,它可以通过使用ConsoleKeyInfo。例如:

public static void Main() 
{ 
    ConsoleKeyInfo cki; 
    // Prevent example from ending if CTL+C is pressed. 
    Console.TreatControlCAsInput = true; 

    Console.WriteLine("Press any combination of CTL, ALT, and SHIFT, and a console key."); 
    Console.WriteLine("Press the Escape (Esc) key to quit: \n"); 
    do 
    { 
    cki = Console.ReadKey(); 
    Console.Write(" --- You pressed "); 
    if((cki.Modifiers & ConsoleModifiers.Alt) != 0) Console.Write("ALT+"); 
    if((cki.Modifiers & ConsoleModifiers.Shift) != 0) Console.Write("SHIFT+"); 
    if((cki.Modifiers & ConsoleModifiers.Control) != 0) Console.Write("CTL+"); 
    Console.WriteLine(cki.Key.ToString()); 
    } while (cki.Key != ConsoleKey.Escape); 
} 

虽然只适用于.NET框架4.6和4.5