Answers:
本页面上的答案均未提及ANSI终端控制的新支持的一个重要方面,该终端控制已添加到构建16257(及更高版本)的Windows 10控制台主机中。即,默认情况下不启用它。除非您使用的特定软件通过使用标志调用SetConsoleMode API 来启用 ANSI处理,否则ENABLE_VIRTUAL_TERMINAL_PROCESSING (0x0400)
您将看不到颜色或获得该应用程序的ANSI处理。
ENABLE_VIRTUAL_TERMINAL_PROCESSING 0x0004
https://docs.microsoft.com/en-us/windows/console/setconsolemode使用WriteFile或WriteConsole编写时,将为VT100和类似的控制字符序列解析字符,这些控制字符序列控制光标移动,颜色/字体模式以及也可以通过现有Console API执行的其他操作。有关更多信息,请参阅控制台虚拟终端序列。
我猜原因本页工作所示的例子是,显然echo
命令(或者也许是批处理的一部分CMD.EXE
或conhost
)通过调用刚才提到的API支持ANSI处理。但是许多其他工具或可执行文件可以写入stdin
或stdout
不执行此操作,在这种情况下,您将看不到这些进程的颜色。
幸运的是,全局默认值可以从选择加入更改为选择退出。注册表项HKEY_CURRENT_USER\Console\VirtualTerminalLevel
设置处理ANSI转义序列的全局默认行为。创建DWORD
密钥(如有必要)并将其值设置为默认情况下1
全局启用(或0
禁用)ANSI处理。
[HKEY_CURRENT_USER \控制台] “VirtualTerminalLevel”= DWORD:00000001
请注意,此注册表设置控制默认值,这意味着它仅影响未通过调用显式操作控制台模式的控制台应用程序SetConsoleMode(...)
。由此可见,虽然注册表值可能有助于为控制台模式不经意的应用程序启用 ANSI ,但它对任何控制台模式 - 精明的应用程序(由于某种原因)可能明确禁用 ANSI 没有任何影响。
从Windows 10 TH2(v1511)开始,conhost.exe
(以及扩展名cmd.exe
)支持ANSI Escape序列,特别是颜色:
有关控制台虚拟终端序列的MSDN页面说明了支持的序列以及如何启用它们:
您可以使用GetConsoleMode和SetConsoleMode标志来配置此行为。[...]
以下序列的行为基于VT100和派生的终端仿真器技术,最具体的是xterm终端仿真器。有关终端序列的更多信息,请访问http://vt100.net和http://invisible-island.net/xterm/ctlseqs/ctlseqs.html。
是否有适用于Windows的控制台模拟器可以解释ANSI着色?
10之前的Windows - 在控制台上没有本机支持ANSI颜色
对于低于10的Windows版本,Windows命令控制台默认情况下不支持输出着色。您可以安装Cmder,ConEmu,ANSICON或Mintty(默认情况下在GitBash和Cygwin中使用)来为Windows命令控制台添加着色支持。
Windows 10 - 命令行颜色
从Windows 10开始,Windows控制台默认支持ANSI Escape序列和一些颜色。
演示
批处理命令
这win10colors.cmd
是由Michele Locati撰写的:
@echo off
cls
echo [101;93m STYLES [0m
echo ^<ESC^>[0m [0mReset[0m
echo ^<ESC^>[1m [1mBold[0m
echo ^<ESC^>[4m [4mUnderline[0m
echo ^<ESC^>[7m [7mInverse[0m
echo.
echo [101;93m NORMAL FOREGROUND COLORS [0m
echo ^<ESC^>[30m [30mBlack[0m (black)
echo ^<ESC^>[31m [31mRed[0m
echo ^<ESC^>[32m [32mGreen[0m
echo ^<ESC^>[33m [33mYellow[0m
echo ^<ESC^>[34m [34mBlue[0m
echo ^<ESC^>[35m [35mMagenta[0m
echo ^<ESC^>[36m [36mCyan[0m
echo ^<ESC^>[37m [37mWhite[0m
echo.
echo [101;93m NORMAL BACKGROUND COLORS [0m
echo ^<ESC^>[40m [40mBlack[0m
echo ^<ESC^>[41m [41mRed[0m
echo ^<ESC^>[42m [42mGreen[0m
echo ^<ESC^>[43m [43mYellow[0m
echo ^<ESC^>[44m [44mBlue[0m
echo ^<ESC^>[45m [45mMagenta[0m
echo ^<ESC^>[46m [46mCyan[0m
echo ^<ESC^>[47m [47mWhite[0m (white)
echo.
echo [101;93m STRONG FOREGROUND COLORS [0m
echo ^<ESC^>[90m [90mWhite[0m
echo ^<ESC^>[91m [91mRed[0m
echo ^<ESC^>[92m [92mGreen[0m
echo ^<ESC^>[93m [93mYellow[0m
echo ^<ESC^>[94m [94mBlue[0m
echo ^<ESC^>[95m [95mMagenta[0m
echo ^<ESC^>[96m [96mCyan[0m
echo ^<ESC^>[97m [97mWhite[0m
echo.
echo [101;93m STRONG BACKGROUND COLORS [0m
echo ^<ESC^>[100m [100mBlack[0m
echo ^<ESC^>[101m [101mRed[0m
echo ^<ESC^>[102m [102mGreen[0m
echo ^<ESC^>[103m [103mYellow[0m
echo ^<ESC^>[104m [104mBlue[0m
echo ^<ESC^>[105m [105mMagenta[0m
echo ^<ESC^>[106m [106mCyan[0m
echo ^<ESC^>[107m [107mWhite[0m
echo.
echo [101;93m COMBINATIONS [0m
echo ^<ESC^>[31m [31mred foreground color[0m
echo ^<ESC^>[7m [7minverse foreground ^<-^> background[0m
echo ^<ESC^>[7;31m [7;31minverse red foreground color[0m
echo ^<ESC^>[7m and nested ^<ESC^>[31m [7mbefore [31mnested[0m
echo ^<ESC^>[31m and nested ^<ESC^>[7m [31mbefore [7mnested[0m