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

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

    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, чтобы я мог вызвать это событие?

3 ответов


для консольного приложения вы можете сделать это,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


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

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


другое решение, я использовал его для моего текстового приключения.

        ConsoleKey choice;
        do
        {
           choice = Console.ReadKey(true).Key;
            switch (choice)
            {
                // 1 ! key
                case ConsoleKey.D1:
                    Console.WriteLine("1. Choice");
                    break;
                //2 @ key
                case ConsoleKey.D2:
                    Console.WriteLine("2. Choice");
                    break;
            }
        } while (choice != ConsoleKey.D1 && choice != ConsoleKey.D2);