Как обрабатывать событие нажатия клавиши в консольном приложении

Я хочу создать консольное приложение, которое отобразит клавишу, нажатую на экране консоли, я сделал этот код до сих пор:

    static void Main(string[] args)
    {
        // this is absolutely wrong, but I hope you get what I mean
        PreviewKeyDownEventArgs += new PreviewKeyDownEventArgs(keylogger);
    }

    private void keylogger(KeyEventArgs e)
    {
        Console.Write(e.KeyCode);
    }

Я хочу знать, что мне следует вводить в main, чтобы я мог назвать это событие?

Для консольного приложения вы можете сделать это, цикл do while выполняется до тех пор, пока вы не нажмете x

public class Program
{
    public static void Main()
    {

        ConsoleKeyInfo keyinfo;
        do
        {
            keyinfo = Console.ReadKey();
            Console.WriteLine(keyinfo.Key + " was pressed");
        }
        while (keyinfo.Key != ConsoleKey.X);
    }
}

Это будет работать, только если ваше консольное приложение сосредоточено. Если вы хотите собрать широкомасштабные нажатия клавиш системы, вы можете использовать перехваты Windows

19
ответ дан 17 янв. '12 в 19:34
источник

К сожалению, в классе Console нет событий, определенных для ввода пользователя, однако если вы хотите вывести текущий символ, который был нажат, вы можете сделать следующее:

 static void Main(string[] args)
 {
     //This will loop indefinitely 
     while (true)
     {
         /*Output the character which was pressed. This will duplicate the input, such
          that if you press 'a' the output will be 'aa'. To prevent this, pass true to
          the ReadKey overload*/
         Console.Write(Console.ReadKey().KeyChar);
     }
 }

Console.ReadKey возвращает объект ConsoleKeyInfo, который инкапсулирует много информации о нажатии клавиши.

11
ответ дан 17 янв. '12 в 19:40
источник