Как работать с функциональными клавишами

Console.WriteLine("Введите что угодно кроме функциональных клавиш");
if (Console.ReadLine() == "") break;

Console.WriteLine("Наш великолепный код пришел к своему не менее великолепному концу, начинаем заново");

вот тут я использую любую клавишу там буквы, цифры, и цикл начинает запускаться заново, но при нажатии функциональной клавиши оно сразу же закрывается, а мне надо чтобы при нажатии Escape програ спрашивала у меня закрыватть ли прогу или начинать цикл заново ?


Ответы (1 шт):

Автор решения: aepot

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

private static void Main(string[] args)
{
    while (true)
    {
        ConsoleKeyInfo keyInfo = Console.ReadKey(true);
        if (keyInfo.Key == ConsoleKey.Escape)
        {
            Console.WriteLine();
            Console.Write("Выходим? (y/n): ");
            bool isExit = Console.ReadKey().KeyChar == 'y';
            Console.WriteLine();
            if (isExit)
                break;
            else
                Console.WriteLine("Ну нет, так нет.");
        }
        switch (keyInfo.Key)
        {
            case ConsoleKey.Enter:
                Console.WriteLine();
                break;
            case ConsoleKey.Backspace:
                Console.Write("\b \b");
                break;
            default:
                Console.Write(keyInfo.KeyChar);
                break;
        }
    }
    Console.WriteLine("Пока.");
    Console.ReadKey();
}
привет мир
Выходим? (y/n): ы
Ну нет, так нет.
еще раз привет

Выходим? (y/n): y
Пока.

Можно даже вот так проверять

bool isExit = Console.ReadKey().Key == ConsoleKey.Y;

Тогда даже когда русский включен, будет срабатывать.

→ Ссылка