29

コンソール画面で押されたキーを表示するコンソール アプリケーションを作成したいので、これまでに次のコードを作成しました。

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

そのイベントを呼び出すには、メインに何を入力すればよいですか?

4

3 に答える 3

28

これを行うことができるコンソールアプリケーションの場合、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 フックを使用できます

于 2012-01-17T16:34:35.450 に答える
15

残念ながら、Console クラスにはユーザー入力用に定義されたイベントはありませんが、押された現在の文字を出力したい場合は、次のようにすることができます。

 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は、押されたキーに関する多くの情報をカプセル化するConsoleKeyInfoオブジェクトを返します。

于 2012-01-17T16:40:31.027 に答える
2

別の解決策として、テキストベースの冒険に使用しました。

        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);
于 2018-03-28T19:35:41.643 に答える