Wie kann man die Win32-Konsole dazu bringen, ANSI/VT100-Escape-Sequenzen in „c“ zu erkennen?
Lesezeit: 6 Minuten
Witiko
Ich baue eine leichtgewichtige Version der Ncurses-Bibliothek. Bisher funktioniert es ziemlich gut mit VT100-kompatiblen Terminals, aber die Win32-Konsole erkennt das nicht \033 Code als Beginn einer Escape-Sequenz:
# include <stdio.h>
# include "term.h"
int main(void) {
puts(BOLD COLOR(FG, RED) "Bold text" NOT_BOLD " is cool!" CLEAR);
return 0;
}
Was ist auf der zu tun C code Level, damit der ANSI.SYS-Treiber geladen und die ANSI/VT100-Escape-Sequenzen erkannt werden?
Es gibt colorama Modul für Python: “Unter Windows entfernt Colorama diese ANSI-Zeichen aus stdout und konvertiert sie in entsprechende Win32-Aufrufe für farbigen Text. Auf anderen Plattformen tut Colorama nichts.”
– jfs
18. September 2017 um 8:25 Uhr
Bitte beachten Sie, dass sich die Spielregeln seit den letzten Versionen von Windows 10 drastisch geändert haben.
– Andreas Rejbrand
26. Juli 2018 um 13:37 Uhr
Zu Ihrer Information, im neuesten Windows 10 können Sie ANSI in Conhost über den folgenden Reghack aktivieren — in HKCU\Console ein … kreieren DWORD genannt VirtualTerminalLevel und stelle es ein 0x1; dann cmd.exe neu starten. — Sie können es mit der folgenden Powershell testen "?[1;31mele ?[32mct ?[33mroni ?[35mX ?[36mtar ?[m".Replace('?', [char]27);.
– BrainSlugs83
27. Oktober 2018 um 21:17 Uhr
aktualisiert learn.microsoft.com/en-us/windows/console/… hier, wie es aktiviert werden könnte, ohne die Registrierung zu bearbeiten und möglicherweise andere Anwendungen zu beschädigen
– Bogdan-Mart
8. März 2019 um 18:13 Uhr
ANSI.SYS ist eine Sache, die ich seit den WIN98-Tagen nicht mehr gesehen habe.
– Luis Felipe
30. November 2022 um 15:57 Uhr
Franco Rondini
[UPDATE] Für das neueste Windows 10 lesen Sie bitte den nützlichen Beitrag von @brainslugs83, gleich unten in den Kommentaren zu dieser Antwort.
Während für Versionen vor Windows 10 Anniversary Update:
ANSI.SYS hat die Einschränkung, dass es nur im Kontext des MS-DOS-Subsystems unter Windows 95-Vista ausgeführt werden kann.
Microsoft KB101875 erklärt, wie man ANSI.SYS in einem Befehlsfenster aktiviert, aber es gilt nicht für Windows NT. Nach dem Artikel: wir alle lieben Farbenmoderne Versionen von Windows haben diese nette ANSI-Unterstützung nicht.
Stattdessen hat Microsoft viele Funktionen erstellt, aber das ist weit davon entfernt, dass Sie ANSI/VT100-Escape-Sequenzen ausführen müssen.
ANSI.SYS funktioniert auch in NT-abgeleiteten Systemen für ältere 16-Bit-Programme, die unter NTVDM ausgeführt werden.
Die Win32-Konsole unterstützt überhaupt keine ANSI-Escape-Sequenzen. Software wie z Ansikon kann jedoch als Wrapper um die standardmäßige Win32-Konsole fungieren und Unterstützung für ANSI-Escape-Sequenzen hinzufügen.
Also denke ich ANSIKON von Jason Hood ist Ihre Lösung. Es ist eingeschrieben Cunterstützt 32-Bit- und 64-Bit-Versionen von Windows und die Quelle ist vorhanden.
Außerdem habe ich eine andere ähnliche Frage oder einen ähnlichen Beitrag gefunden, die letztendlich zur Verwendung von ANSICON beantwortet wurden:
Wie lade ich ANSI-Escape-Codes oder erhalte eine farbige Dateiliste in der WinXP-Cmd-Shell?
Wie sich die Zeiten ändern 😉 Im Windows 10 Anniversary Update und darüber hinaus wurde die Windows-Konsole mit ziemlich solider Unterstützung für ANSI/VT-Sequenzen aktualisiert, und im Creators Update wurde sie aktualisiert, um auch 24-Bit-RGB-Farben zu unterstützen: blogs.msdn.microsoft.com/commandline/2016/09/22/…
Zu Ihrer Information, im neuesten Windows 10 können Sie ANSI in Conhost über den folgenden Reghack aktivieren — in HKCU\Console ein … kreieren DWORD genannt VirtualTerminalLevel und stelle es ein 0x1; dann cmd.exe neu starten. — Sie können es mit der folgenden Powershell testen "?[1;31mele ?[32mct ?[33mroni ?[35mX ?[36mtar ?[m".Replace('?', [char]27);.
– BrainSlugs83
27. Oktober 2018 um 21:18 Uhr
Danke @brainslugs83 – Antwort aktualisiert, um Ihren Kommentar zu zitieren
– Franco Rondini
30. Oktober 2018 um 17:57 Uhr
rollen
Ab Windows 10 TH2 (v1511), conhost.exe Und cmd.exe unterstützt ANSI- und VT100-Escape-Sequenzen von Haus aus (obwohl sie müssen aktiviert werden).
Die 105xx-Builds waren die einzigen Builds mit standardmäßig aktivierten VT100-Sequenzen. In früheren und späteren Builds ist es standardmäßig deaktiviert, da es versehentlich aktiviert wurde. Siehe hier für die Erklärung wpdev.uservoice.com/forums/…
– Anatol Belski
12. August 2016 um 0:03 Uhr
Zu Ihrer Information, im neuesten Windows 10 können Sie ANSI in Conhost über den folgenden Reghack aktivieren — in HKCU\Console ein … kreieren DWORD genannt VirtualTerminalLevel und stelle es ein 0x1; dann cmd.exe neu starten. — Sie können es mit der folgenden Powershell testen "?[1;31mele ?[32mct ?[33mroni ?[35mX ?[36mtar ?[m".Replace('?', [char]27);.
– BrainSlugs83
27. Oktober 2018 um 21:18 Uhr
Basierend auf @BrainSlugs83 können Sie die aktuelle Windows 10-Version per Registrierung mit dieser Befehlszeile aktivieren:
Für Python 2.7 funktioniert das folgende Skript für mich gut mit Windows 10 (v1607)
import os print '\033[35m'+'color-test'+'\033[39m'+" test end"
os.system('') #enable VT100 Escape Sequence for WINDOWS 10 Ver. 1607
print '\033[35m'+'color-test'+'\033[39m'+" test end"
Result should be:
[35mcolor-test[39m test end
color-test test end
Starting from Windows 10, you can use ENABLE_VIRTUAL_TERMINAL_PROCESSING to enable ANSI escape sequences:
If ANSICON is not acceptable since it requires you to install something on the system, a more lightweight solution that parses and translates the ANSI codes into the relevant Win32 API console functions such as SetConsoleTextAttribute.
Es gibt
colorama
Modul für Python: “Unter Windows entfernt Colorama diese ANSI-Zeichen aus stdout und konvertiert sie in entsprechende Win32-Aufrufe für farbigen Text. Auf anderen Plattformen tut Colorama nichts.”– jfs
18. September 2017 um 8:25 Uhr
Bitte beachten Sie, dass sich die Spielregeln seit den letzten Versionen von Windows 10 drastisch geändert haben.
– Andreas Rejbrand
26. Juli 2018 um 13:37 Uhr
Zu Ihrer Information, im neuesten Windows 10 können Sie ANSI in Conhost über den folgenden Reghack aktivieren — in
HKCU\Console
ein … kreierenDWORD
genanntVirtualTerminalLevel
und stelle es ein0x1
; dann cmd.exe neu starten. — Sie können es mit der folgenden Powershell testen"?[1;31mele ?[32mct ?[33mroni ?[35mX ?[36mtar ?[m".Replace('?', [char]27);
.– BrainSlugs83
27. Oktober 2018 um 21:17 Uhr
aktualisiert learn.microsoft.com/en-us/windows/console/… hier, wie es aktiviert werden könnte, ohne die Registrierung zu bearbeiten und möglicherweise andere Anwendungen zu beschädigen
– Bogdan-Mart
8. März 2019 um 18:13 Uhr
ANSI.SYS ist eine Sache, die ich seit den WIN98-Tagen nicht mehr gesehen habe.
– Luis Felipe
30. November 2022 um 15:57 Uhr