Wie kann man die Win32-Konsole dazu bringen, ANSI/VT100-Escape-Sequenzen in „c“ zu erkennen?

Lesezeit: 6 Minuten

Witikos Benutzer-Avatar
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;
}

Bildschirmfoto

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

Benutzeravatar von Franco Rondini
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.

Eine genauere Erklärung finden Sie unter Wikipedia-Artikel:

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:

  • Ich habe einmal einen Hack gemacht, um ANSI in Windows XP ohne Tools von Drittanbietern zum Laufen zu bringen groups.google.com/forum/#!topic/alt.msdos.batch.nt/YZnoq80Mcds

    – Europäische Sommerzeit

    20. Oktober 2015 um 1:31 Uhr

  • 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/…

    – Rich Turner

    12. Juli 2017 um 0:29 Uhr

  • @Simon danke, ich habe den Link entfernt, weil er übrigens nicht funktioniert archivierte Version von kb/101875 hier

    – Franco Rondini

    6. März 2018 um 19: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


  • Danke @brainslugs83 – Antwort aktualisiert, um Ihren Kommentar zu zitieren

    – Franco Rondini

    30. Oktober 2018 um 17:57 Uhr

Benutzeravatar von rolve
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).

Sehen meine Antwort bei Superuser für mehr Details.

  • 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:

REG ADD HKCU\CONSOLE /f /v VirtualTerminalLevel /t REG_DWORD /d 1

  • Wird dies in allen Windows 10-Versionen unterstützt? Oder ab einem bestimmten Update verfügbar?

    – Youssef13

    15. Dezember 2019 um 7:02 Uhr

  • In der ersten Version von Windows 10 wird es nicht unterstützt, aber in den aktuellen funktioniert es einwandfrei.

    – Daniel De Leon

    15. Dezember 2019 um 22:19 Uhr

  • Ich möchte die spezifische Version wissen, die dies unterstützt.

    – Youssef13

    16. Dezember 2019 um 7:42 Uhr

  • @ Youssef13 Laut superuser.com/a/1300251/702169die erste unterstützende Version ist Build 16257.

    – InQβ

    22. Juli 2021 um 1:59 Uhr

Benutzeravatar von Guestreader
Gastleser

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:

https://msdn.microsoft.com/en-us/library/windows/desktop/mt638032(v=vs.85).aspx

Joakim's user avatar
Joakim

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.

https://github.com/mattn/ansicolor-w32.c

Xantium's user avatar
Xantium

For coloring the cmd you need Windows.h and use SetConsoleTextAttribute() more details can be found in http://msdn.microsoft.com/en-us/library/windows/desktop/ms686047%28v=vs.85%29.aspx

1447540cookie-checkWie kann man die Win32-Konsole dazu bringen, ANSI/VT100-Escape-Sequenzen in „c“ zu erkennen?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy