2012-01-17 8 views
23

voglio creare un'applicazione console che visualizza il tasto premuto sullo schermo della console, ho fatto questo codice finora:Come gestire chiave evento stampa in un'applicazione console

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

voglio sapere , cosa dovrei digitare in main in modo da poter chiamare quell'evento?

risposta

20

Per un'applicazione console si può fare questo, i do while ciclo viene eseguito fino a che si preme 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); 
    } 
} 

questo funziona solo se l'applicazione di console ha lo stato attivo. Se si desidera raccogliere eventi di stampa chiave a livello di sistema è possibile utilizzare windows hooks

12

Sfortunatamente la classe Console non ha alcun evento definito per l'input dell'utente, tuttavia se si desidera stampare il carattere corrente che è stato premuto, è possibile eseguire quanto segue :

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 restituisce un oggetto ConsoleKeyInfo, che incapsula un sacco di informazioni sulla chiave che è stato premuto.