2009-12-26 12 views
5

Ok aquí hay una aplicación de consola simple que hice para probar el RedirectStandardOutput del Process.StartInfo.¿Por qué RedirectStandardOutput no tiene los códigos ANSI necesarios?

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

A continuación, se muestra el resultado de la aplicación.

Result of the Console Application.

Así como podemos ver los colores muestran muy bien en la consola.

Sin embargo, cuando leo el StandardOutput.BaseStream no hay información de color, no hay códigos ANSI, no hay nada.

¿Cómo capturo la información de color en la secuencia redirigida?

+0

Dejo esta pregunta abierta hasta que alguien pueda darme una buena respuesta. –

Respuesta

1

La respuesta corta es que los flujos que te da la clase .NET Console se basan exclusivamente en caracteres y devuelven solo datos textuales.

Para obtener la información de color extendida, sería necesario P/Invocar la API de Win32 ReadConsoleOutput. Esto devolverá, entre otras cosas, una matriz de COLOR_INFO estructuras que contienen los atributos de color para cada carácter. Es posible que desee mirar el ReadConsoleOutput pinvoke.net page para comenzar.

+0

Desafortunadamente eso no es lo que estoy buscando, porque ReadConsoleOutput lee la pantalla de la consola como un todo, mientras que lo que quiero es poder leer la información de color mientras el proceso de consola escribe datos en stdout (y obviamente stderr) . –

Cuestiones relacionadas