为什么我的控制台应用程序有命令历史?

The*_*ger 19 .net c# windows console console-application

我编写了一个控制台应用程序,它本质上是一个Console.ReadLine() - Loop.当应用程序等待输入时,按向上箭头键会迭代所有先前的输入行.我的应用程序不包含此功能的任何代码.Windows的哪个部分提供此功能?我该如何禁用它?

我只能想象它是控制台子系统的一个功能,或者是在Console.ReadLine()中实现的.

以下是一些展示所描述行为的示例代码:

namespace ConsoleApplication
{
    class Program
    {
        static void Main(string[] args)
        {
            string input;
            do
            {
                input = System.Console.ReadLine();
            } while (input != "exit");
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我想暂时禁用历史记录功能,稍后使用我自己的代码重新实现它.目前的行为太有限了.

Yah*_*hia 20

您可以通过调用SetConsoleHistoryInfo正确的安装CONSOLE_HISTORY_INFO结构以编程方式更改Windows的这种行为...似乎没有托管类/方法,所以你将不得不使用DllImport等.

http://msdn.microsoft.com/en-us/library/ms686031%28v=VS.85%29.aspx
http://msdn.microsoft.com/en-us/library/ms682077%28v=VS.85 %29.aspx

如果需要 - 可以以托管方式处理控制台的其他几个方面 - 请参阅c#console,Console.Clear问题