Perché il RedirectStandardOutput non ha i codici ANSI necessarie?
-
21-09-2019 - |
Domanda
Ok qui è una semplice applicazione console che ho fatto per testare la RedirectStandardOutput
del Process.StartInfo
.
foreach (c In [Enum].GetValues(GetType(ConsoleColor))
{
Console.ForegroundColor = c
Console.WriteLine("Test")
}
E sotto è il risultato dell'applicazione.
Quindi, come possiamo vedere i colori mostrano splendidamente sulla console.
Tuttavia, quando ho letto la StandardOutput.BaseStream
non c'è informazioni sul colore, nessun codice ANSI, niente di niente.
Come faccio a catturare le informazioni sul colore sul torrente reindirizzato?
Soluzione
La risposta breve è che i flussi di come sono stati forniti dalla classe .NET Console
sono puramente basati su caratteri e restituiscono dati testuali solo.
Per ottenere le informazioni di colore esteso, sarebbe necessario P / Invoke API Win32 ReadConsoleOutput . Ciò restituirà, tra le altre cose, una serie di COLOR_INFO le strutture che contengono gli attributi di colore per ogni personaggio. Si potrebbe desiderare di guardare il ReadConsoleOutput pinvoke.net pagina per ottenere iniziato.