2012-07-25 14 views
7

Necesito comprobar si se presionó alguna tecla en una aplicación de consola. La clave puede ser cualquier tecla en el teclado. Algo así como:Comprobando si se presionó alguna tecla en la aplicación de consola C#

if(keypressed) 
{ 

//Cleanup the resources used 

} 

me había ocurrido esto:

ConsoleKeyInfo cki; 
cki=Console.ReadKey(); 

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

Funciona bien con todas las teclas excepto las teclas modificadoras - ¿cómo puedo comprobar estas llaves?

+0

¿Qué has intentado? – BugFinder

+0

ConsoleKeyInfo cki; cki = Console.ReadKey(); if (cki.Equals (cki)) Console.WriteLine ("tecla presionada"); Funciona bien con todas las teclas excepto las de modificación. – user1502952

+0

Wow, has cambiado mucho tu pregunta desde que la contesté ... – BugFinder

Respuesta

12

Esto puede ayudarle a:

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

Si desea utilizarlo en un if, puede intentar esto:

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

Para cualquier tecla es muy simple: eliminar el if.


Como se mencionó @DawidFerenczy tenemos que señalar que Console.ReadKey() está bloqueando. Detiene la ejecución y espera hasta que se presione una tecla. Dependiendo del contexto, esto puede (no) ser útil.

Si no necesita bloquear la ejecución, simplemente pruebe Console.KeyAvailable. Contendrá true si se presionó una tecla, de lo contrario false.

+1

No olvide marcar mi respuesta si es buena. –

+0

Quiere que funcione con cualquier tecla presionada – user1502952

+0

Simplemente elimine el 'si'. –

5

Eche un vistazo a Console.KeyAvailible si quiere que no se bloquee.

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

Si desea bloquear a continuación, utilizar Console.ReadKey.

+0

¿Es posible usar if? (Cki.key == ConsoleKey.Enter). en lugar de especificar ConsoleKey.Enter, comprobando todas las claves a la vez bcoz, tengo que evitar el ciclo – user1502952

Cuestiones relacionadas