在密钥到达控制台之前捕获密钥

时间:2014-01-24 18:29:48

标签: c# events mono console-application

设置:

.net程序中的控制台程序

我在循环中使用readkey,它会重写到屏幕上的同一行(Console.setCursorPosition)

但是,如果我输入Enter,则控制台会向上推文本,这是通常的命令行行为。

问题:

是否可以捕获按键(输入),以便我的程序获得密钥,但控制台没有?

环境是Linux,使用Mono(该程序应该是跨平台的)。所以低级别的Windows驱动程序拦截不是一种选择。

PS:我知道清除和重绘所有内容的方法。我想知道我的问题是否可行。

感谢您提供任何信息

3 个答案:

答案 0 :(得分:2)

修改此处找到的代码后https://stackoverflow.com/a/8898251/1951298我找到了可以帮到你的东西,你看到当用户按下Enter键时,光标没有增加,并且没有任何内容被写入控制台

ConsoleKeyInfo keyinfo;
    int left, top=0;
    do
    {
        left =  Console.CursorLeft;
        top =  Console.CursorTop;
        keyinfo = Console.ReadKey(true);


        if(keyinfo.Key.ToString().Equals("Enter"))
             Console.SetCursorPosition(left,top-1);
        else
             Console.WriteLine(keyinfo.Key + " was pressed");

    }
    while (keyinfo.Key != ConsoleKey.X);

答案 1 :(得分:1)

Console.ReadKey(true)应该读取密钥但不显示密码。

答案 2 :(得分:1)

你应该拦截按键。 MSDN Documentation

var PressedKey = Console.ReadKey(true)