Почему 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, чтобы начать.