Why the RedirectStandardOutput does not have the necessary ANSI codes?
-
21-09-2019 - |
문제
Ok here's a simple Console Application I made to test the RedirectStandardOutput
of the Process.StartInfo
.
foreach (c In [Enum].GetValues(GetType(ConsoleColor))
{
Console.ForegroundColor = c
Console.WriteLine("Test")
}
And below is the application result.
So as we can see the colors show beautifully on the console.
However, when I read the StandardOutput.BaseStream
there's no color information, no ANSI codes, no nothing.
How do I capture the color information on the redirected stream?
해결책
The short answer is that the streams as given to you by the .NET Console
class are purely character-based and return only textual data.
To get the extended color info, it would be necessary to P/Invoke the Win32 API ReadConsoleOutput. This will return, among other things, an array of COLOR_INFO structs containing the color attributes for each character. You might want to look at the ReadConsoleOutput pinvoke.net page to get started.