Почему RedirectStandardOutput не имеет необходимых кодов ANSI? - PullRequest
5 голосов
/ 26 декабря 2009

Хорошо, вот простое консольное приложение, которое я сделал для проверки RedirectStandardOutput из Process.StartInfo.

    foreach (c In [Enum].GetValues(GetType(ConsoleColor))
    {
        Console.ForegroundColor = c
        Console.WriteLine("Test")
    }

И ниже - результат применения.

Result of the Console Application.

Так что, как мы видим, цвета прекрасно отображаются на консоли.

Однако, когда я читаю StandardOutput.BaseStream, нет информации о цвете, нет кодов ANSI, нет ничего.

Как получить информацию о цвете в перенаправленном потоке?

1 Ответ

1 голос
/ 26 декабря 2009

Короткий ответ: потоки, переданные вам классом .NET Console, основаны исключительно на символах и возвращают только текстовые данные.

Чтобы получить расширенную информацию о цвете, необходимо выполнить P / Invoke Win32 API ReadConsoleOutput . Это вернет, среди прочего, массив COLOR_INFO структур, содержащих атрибуты цвета для каждого символа. Возможно, вы захотите взглянуть на страницу ReadConsoleOutput pinvoke.net , чтобы начать.

...