代码之家  ›  专栏  ›  技术社区  ›  Paulo Santos

为什么RedirectStandardOutput没有必要的ANSI代码?

  •  5
  • Paulo Santos  · 技术社区  · 15 年前

    好的,这是我做的一个简单的控制台应用程序,用于测试 过程的 RedirectStandardOutput->code>。

    foreach(c in[enum].getvalues(gettype(consolecolor))。
    {
    console.foregroundcolor=c
    console.writeline(“测试”)
    }
    < /代码> 
    
    

    以下是应用结果。

    因此,我们可以看到颜色在控制台上显示得非常漂亮。

    但是,当我阅读standardoutput.basestreamthere's no color information,no ansi code s,no nothing.

    如何捕获重定向流上的颜色信息? foreach (c In [Enum].GetValues(GetType(ConsoleColor)) { Console.ForegroundColor = c Console.WriteLine("Test") }

    以下是申请结果。

    Result of the Console Application.

    因此,我们可以看到颜色在控制台上显示得很漂亮。

    但是,当我读到 StandardOutput.BaseStream 没有颜色信息,没有ANSI代码,什么都没有。

    如何捕获重定向流上的颜色信息?

    1 回复  |  直到 15 年前
        1
  •  1
  •   bobbymcr    15 年前

    简单的答案是.NET提供给您的流 Console 类完全基于字符,只返回文本数据。

    要获取扩展的颜色信息,需要p/invoke win32 api ReadConsoleOutput . 这将返回一个 COLOR_INFO 包含每个字符的颜色属性的结构。你可能想看看 ReadConsoleOutput pinvoke.net page 开始。

    推荐文章