Почему RedirectStandardOutput не имеет необходимых кодов ANSI?

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

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

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

Результат консольного приложения.

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

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

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

1 ответ

Решение

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

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

Другие вопросы по тегам