Keine der Antworten auf dieser Seite erwähnt einen wichtigen Aspekt der neuen Unterstützung für ANSI Terminal Control, die dem Windows 10- Konsolenhost in Build 16257 (und höher) hinzugefügt wurde . Das heißt, es ist nicht standardmäßig voreingestellt. Es sei denn, die spezifische Software verwenden Sie ermöglicht ANSI Verarbeitung durch den Aufruf SetConsoleMode API mit der ENABLE_VIRTUAL_TERMINAL_PROCESSING (0x0400)
Flagge, werden Sie keine Farben sehen oder ANSI - Verarbeitung für diese Anwendung erhalten.
ENABLE_VIRTUAL_TERMINAL_PROCESSING 0x0004
https://docs.microsoft.com/en-us/windows/console/setconsolemode
Beim Schreiben mit WriteFile oder WriteConsole werden Zeichen für VT100 und ähnliche Steuerzeichenfolgen analysiert, die die Cursorbewegung, den Farb- / Zeichensatzmodus und andere Vorgänge steuern, die auch über die vorhandenen Console-APIs ausgeführt werden können. Weitere Informationen finden Sie unter Konsolenreihenfolge für virtuelle Terminals.
Ich schätze, der Grund für die auf dieser Seite gezeigten Beispiele ist, dass der echo
Befehl (oder möglicherweise der Teil für die Stapelverarbeitung von CMD.EXE
oder conhost
) die ANSI-Verarbeitung durch Aufrufen der eben erwähnten API aktiviert. Aber viele andere Tools oder ausführbare Dateien, auf die geschrieben wird stdin
oder die dies stdout
möglicherweise nicht tun. In diesem Fall werden für diese Prozesse keine Farben angezeigt.
Glücklicherweise kann der globale Standard von Opt-In zu Opt-Out geändert werden . Der Registrierungsschlüssel um HKEY_CURRENT_USER\Console\VirtualTerminalLevel
legt das globale Standardverhalten für die Verarbeitung von ANSI-Escape-Sequenzen fest. Erstellen Sie einen DWORD
Schlüssel (falls erforderlich), und legen Sie als Wert fest, 1
dass die 0
ANSI-Verarbeitung standardmäßig aktiviert (oder deaktiviert) ist.
[HKEY_CURRENT_USER \ Console] "VirtualTerminalLevel" = dword: 00000001
Beachten Sie, dass diese Registrierungseinstellung einen Standardwert steuert. Dies bedeutet, dass nur Konsolenanwendungen betroffen sind, die den Konsolenmodus nicht explizit durch Aufruf bearbeiten SetConsoleMode(...)
. Daraus folgt, dass der Registrierungswert zwar dazu beitragen kann, ANSI für Konsolenmodus-vergessende Apps zu aktivieren, er hat jedoch keine Auswirkungen auf Konsolenmodus-versierte Apps, die ANSI (aus irgendeinem Grund) explizit deaktivieren .