gpt4 book ai didi

c# - 不记录 Console.ReadLine 输出?

转载 作者:太空宇宙 更新时间:2023-11-03 20:13:00 28 4
gpt4 key购买 nike

当用户在 Console.ReadLine 中插入内容时,我如何才能不显示输出,这样控制台就不会显示用户输入的内容?谢谢!

最佳答案

如果出于非安全原因想要隐藏输入,使用 ReadKey 或各种方法来隐藏输入是相当乏味的。它可以直接使用 Windows API 完成。我在搜索此内容时发现的一些示例代码没有立即起作用,但下面的代码起作用了。

但是,如果您隐藏的输入是为了安全(例如密码),则最好使用 ReadKeySecureString,因为 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);
}
}
}

关于c# - 不记录 Console.ReadLine 输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18810060/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com