コンソール画面で押されたキーを表示するコンソールアプリケーションを作成したいので、これまでこのコードを作成しました。
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);
}
知りたいのですが、メインに何を入力すればそのイベントを呼び出すことができますか?
これを行うことができるコンソールアプリケーションの場合、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 hooks を使用できます。
残念ながら、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 オブジェクトを返します。
別の解決策として、テキストベースのアドベンチャーに使用しました。
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);