Warum die RedirectStandardOutput nicht über die notwendigen Codes ANSI?
-
21-09-2019 - |
Frage
Ok hier ist eine einfache Konsole-Anwendung ich die RedirectStandardOutput
des Process.StartInfo
zu testen gemacht.
foreach (c In [Enum].GetValues(GetType(ConsoleColor))
{
Console.ForegroundColor = c
Console.WriteLine("Test")
}
Und unten ist die Anwendung Ergebnis.
So wie wir die Farben zeigen, schön auf der Konsole sehen können.
Allerdings, wenn ich die StandardOutput.BaseStream
lesen gibt es keine Farbinformationen, keine ANSI-Codes, kein gar nichts.
Wie erfasse ich die Farbinformation auf dem umgeleiteten Strom?
Lösung
Die kurze Antwort ist, dass die Ströme, wie durch die .NET Console
Klasse Sie gegeben sind rein zeichenbasierte und nur Textdaten zurück.
Um die erweiterten Farb Informationen zu erhalten, wäre es notwendig, zu P / Invoke den Win32-API ReadConsoleOutput . Dies wird wiederkommen, unter anderem eine Reihe von COLOR_INFO structs die Farbe mit Attributen für jedes Zeichen. Sie könnten auf der ReadConsoleOutput pinvoke.net aussehen wollen bekommen gestartet.