Pourquoi le RedirectStandardOutput n'a pas les codes ANSI nécessaires?
-
21-09-2019 - |
Question
Ok, voici une simple application de la console que j'ai fait pour tester la RedirectStandardOutput
du Process.StartInfo
.
foreach (c In [Enum].GetValues(GetType(ConsoleColor))
{
Console.ForegroundColor = c
Console.WriteLine("Test")
}
Et ci-dessous est le résultat de l'application.
Alors que nous pouvons voir les couleurs montrent magnifiquement sur la console.
Cependant, quand je lis le StandardOutput.BaseStream
il n'y a pas d'informations de couleur, pas de code ANSI, sans rien.
Comment capturer les informations de couleur sur le flux redirigé?
La solution
La réponse courte est que les cours d'eau comme vous est donné par la classe Console
.NET sont purement à base de caractères et ne renvoient que des données textuelles.
Pour obtenir les informations de couleurs étendue, il serait nécessaire de P / Invoke l'API Win32 ReadConsoleOutput . Ceci renvoie, entre autres, un tableau de COLOR_INFO struct contenant les attributs de couleur pour chaque caractère. Vous pouvez regarder le ReadConsoleOutput pinvoke.net pour obtenir commencé.