2009-12-26 8 views
5

Ok, hier ist eine einfache Konsolenanwendung, die ich gemacht habe, um die RedirectStandardOutput der Process.StartInfo zu testen.Warum hat RedirectStandardOutput nicht die erforderlichen ANSI-Codes?

foreach (c In [Enum].GetValues(GetType(ConsoleColor)) 
    { 
     Console.ForegroundColor = c 
     Console.WriteLine("Test") 
    } 

Und unten ist das Anwendungsergebnis.

Result of the Console Application.

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, nichts.

Wie erfasse ich die Farbinformationen im umgeleiteten Stream?

+0

Ich lasse diese Frage offen, bis mir jemand eine gute Antwort geben kann. –

Antwort

1

Die kurze Antwort ist, dass die Streams, die Ihnen von der Klasse .NET Console gegeben werden, rein zeichenbasiert sind und nur Textdaten zurückgeben.

Um die erweiterten Farbinformationen zu erhalten, müsste P/Invoke die Win32-API ReadConsoleOutput. Dies wird unter anderem ein Array von COLOR_INFO Strukturen zurückgeben, die die Farbattribute für jedes Zeichen enthalten. Vielleicht möchten Sie sich die ReadConsoleOutput pinvoke.net page ansehen, um loszulegen.

+0

Leider suche ich nicht danach, weil ReadConsoleOutput den Konsolenbildschirm als Ganzes liest, während ich will, dass ich die Farbinformationen lesen kann, während der Konsolenprozess Daten in den stdout schreibt (und natürlich stderr) . –