14

I need to check if any key is pressed in a console application. The key can be any key in the keyboard. Something like:

if(keypressed)
{ 

//Cleanup the resources used

}

I had come up with this:

ConsoleKeyInfo cki;
cki=Console.ReadKey();

if(cki.Equals(cki))
Console.WriteLine("key pressed");

It works well with all keys except modifier keys - how can I check these keys?

Tom Haigh
  • 57,217
  • 21
  • 114
  • 142
user1502952
  • 1,390
  • 4
  • 13
  • 27

2 Answers2

24

This can help you:

Console.WriteLine("Press any key to stop");
do {
    while (! Console.KeyAvailable) {
        // Do something
   }       
} while (Console.ReadKey(true).Key != ConsoleKey.Escape);

If you want to use it in an if, you can try this:

ConsoleKeyInfo cki;
while (true)
{
   cki = Console.ReadKey();
   if (cki.Key == ConsoleKey.Escape)
     break;
}

For any key is very simple: remove the if.


As @DawidFerenczy mentioned we have to note that Console.ReadKey() is blocking. It stops the execution and waits until a key is pressed. Depending on the context, this may (not) be handy.

If you need to not block the execution, just test Console.KeyAvailable. It will contain true if a key was pressed, otherwise false.

Ionică Bizău
  • 109,027
  • 88
  • 289
  • 474
10

Have a look at the Console.KeyAvailible if you want nonblocking.

do {
    Console.WriteLine("\nPress a key to display; press the 'x' key to quit.");

// Your code could perform some useful task in the following loop. However, 
// for the sake of this example we'll merely pause for a quarter second.

    while (Console.KeyAvailable == false)
        Thread.Sleep(250); // Loop until input is entered.
    cki = Console.ReadKey(true);
    Console.WriteLine("You pressed the '{0}' key.", cki.Key);
    } while(cki.Key != ConsoleKey.X);
}

If you want blocking then use Console.ReadKey.

Ionică Bizău
  • 109,027
  • 88
  • 289
  • 474
John Mitchell
  • 9,653
  • 9
  • 57
  • 91
  • Is it possible to use like if(cki.key==ConsoleKey.Enter). instead of specifying ConsoleKey.Enter, checking for all keys at once bcoz i need to avoid while loop – user1502952 Jul 25 '12 at 10:29