Por que o RedirectStandardOutput não possui os códigos ANSI necessários?
-
21-09-2019 - |
Pergunta
Ok, aqui está um aplicativo de console simples que fiz para testar o RedirectStandardOutput
do Process.StartInfo
.
foreach (c In [Enum].GetValues(GetType(ConsoleColor))
{
Console.ForegroundColor = c
Console.WriteLine("Test")
}
E abaixo está o resultado do aplicativo.
Assim, como podemos ver, as cores aparecem lindamente no console.
No entanto, quando eu li o StandardOutput.BaseStream
Não há informações de cores, nenhum código ANSI, nada.
Como faço para capturar as informações de cores no fluxo redirecionado?
Solução
A resposta curta é que os fluxos conforme dados a você pelo .NET Console
A classe é puramente baseada em caracteres e retorna apenas dados textuais.
Para obter as informações de cores estendidas, seria necessário p/invocar a API Win32 ReadConsoleOutput. Isso retornará, entre outras coisas, uma variedade de Color_info estruturas contendo os atributos de cor para cada caractere. Você pode querer olhar para o ReadConsoleOutput Pinvoke.net Página para começar.