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

StackOverflow https://stackoverflow.com/questions/1963954

Вопрос

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

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

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

Result of the Console Application.

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

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

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

Это было полезно?

Решение

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top