不记录控制台.ReadLine 输出
本文关键字:输出 ReadLine 控制台 记录 | 更新日期: 2023-09-27 18:31:17
当用户在 Console.ReadLine 中插入某些内容时,我怎么能不显示输出,这样控制台就不会显示用户输入的内容?谢谢!
如果出于非安全原因想要隐藏输入,使用ReadKey
或各种方法来隐藏输入是相当乏味的。它可以直接使用Windows API完成。我在搜索时找到的一些示例代码并没有立即起作用,但下面的代码可以。
但是,对于您隐藏的输入是为了安全(例如密码)的情况,最好使用 ReadKey
和 SecureString
string
因为不会生成包含密码的对象(然后在内存中徘徊直到 GC)。
using System;
using System.Runtime.InteropServices;
namespace Test
{
public class Program
{
[DllImport("kernel32")]
private static extern int SetConsoleMode(IntPtr hConsole, int dwMode);
// http://msdn.microsoft.com/en-us/library/windows/desktop/ms683167(v=vs.85).aspx
[DllImport("kernel32")]
private static extern int GetConsoleMode(IntPtr hConsole, out int dwMode);
// see http://msdn.microsoft.com/en-us/library/windows/desktop/ms683231(v=vs.85).aspx
[DllImport("kernel32")]
private static extern IntPtr GetStdHandle(int nStdHandle);
// see docs for GetStdHandle. Use -10 for STDIN
private static readonly IntPtr hStdIn = GetStdHandle(-10);
// see docs for GetConsoleMode
private const int ENABLE_ECHO_INPUT = 4;
public static void Main(string[] args)
{
Console.WriteLine("Changing console mode");
int mode;
GetConsoleMode(hStdIn, out mode);
SetConsoleMode(hStdIn, (mode & ~ENABLE_ECHO_INPUT));
Console.WriteLine("Mode set");
Console.Write("Enter input: ");
string value = Console.ReadLine();
Console.WriteLine();
Console.WriteLine("You entered: {0}", value);
}
}
}
您需要
使用Console.ReadKey(true)
方法并逐个字符读取输入。
如果需要继续使用 ReadLine
,解决方法是将前景色和背景色设置为相同的值。
如果只想清除用户输入的内容,请使用Console.SetCursorPosition()
方法和写入空格来覆盖用户编写的内容或使用Console.Clear()
清除整个屏幕。
这可用于隐藏用户输入,但用户可以使用控制台>属性更改颜色
ConsoleColor forecolor = Console.ForegroundColor;
Console.ForegroundColor=Console.BackgroundColor;
string test=Console.ReadLine();
Console.ForegroundColor = forecolor;