Почему RedirectStandardOutput не имеет необходимых кодов ANSI?
-
21-09-2019 - |
Вопрос
Хорошо, вот простое консольное приложение, которое я создал для проверки RedirectStandardOutput
принадлежащий Process.StartInfo
.
foreach (c In [Enum].GetValues(GetType(ConsoleColor))
{
Console.ForegroundColor = c
Console.WriteLine("Test")
}
А ниже результат применения.
Как мы видим, цвета прекрасно отображаются на консоли.
Однако, когда я прочитал StandardOutput.BaseStream
нет никакой информации о цвете, никаких кодов ANSI, ничего.
Как мне захватить информацию о цвете в перенаправленном потоке?
Решение
Короткий ответ: потоки, предоставленные вам .NET Console
классы основаны исключительно на символах и возвращают только текстовые данные.
Чтобы получить расширенную информацию о цвете, необходимо P/вызвать API Win32. ReadConsoleOutput.Это вернет, среди прочего, массив COLOR_INFO структуры, содержащие атрибуты цвета для каждого символа.Возможно, вы захотите посмотреть Страница ReadConsoleOutput pinvoke.net для начала.