2015-11-03 5 views
0

Я собираюсь запустить консольное приложение. проблема заключается в том, как определить, что клавиша 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 и используя это для контроля нажатий клавиш. Как я уже сказал, основным источником входных данных приложения Console является входной поток, и если keypress не помещает символы в этот поток ввода, я не знаю, как вы могли бы его обнаружить. –

ответ

0

Да, это возможно, используя 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 Framework 4.6 и 4.5

Смежные вопросы