我想创建一个控制台应用程序,它将显示在控制台屏幕上按下的键,我到目前为止制作了这段代码:
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);
}
我想知道,我应该在main中键入什么才能调用该事件?
答案 0 :(得分:22)
对于控制台应用程序,您可以执行此操作,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
答案 1 :(得分:13)
不幸的是,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对象,该对象封装了有关按下的键的大量信息。
答案 2 :(得分: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);