2009-12-26 10 views
5

Ok ecco una semplice applicazione console che ho fatto per testare lo RedirectStandardOutput del Process.StartInfo.Perché RedirectStandardOutput non ha i codici ANSI necessari?

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

E di seguito è il risultato dell'applicazione.

Result of the Console Application.

Quindi, come possiamo vedere i colori mostrano splendidamente sulla console.

Tuttavia, quando ho letto il StandardOutput.BaseStream non ci sono informazioni sul colore, nessun codice ANSI, niente di niente.

Come posso acquisire le informazioni sul colore sul flusso reindirizzato?

+0

Sto lasciando aperta questa domanda fino a quando qualcuno non mi fornirà una buona risposta. –

risposta

1

La risposta breve è che gli stream forniti dalla classe .NET Console sono puramente basati sui caratteri e restituiscono solo dati testuali.

Per ottenere le informazioni sul colore esteso, sarebbe necessario P/Richiamare l'API Win32 ReadConsoleOutput. Ciò restituirà, tra le altre cose, una serie di strutture COLOR_INFO contenenti gli attributi di colore per ciascun carattere. Potresti voler guardare allo ReadConsoleOutput pinvoke.net page per iniziare.

+0

Sfortunatamente non è quello che sto cercando, perché ReadConsoleOutput legge lo schermo della console nel suo insieme, mentre quello che voglio è poter leggere le informazioni sul colore mentre il processo della console sta scrivendo i dati sullo stdout (e ovviamente sullo stderr) . –

Problemi correlati