Wit*_*iko 58 windows terminal ncurses console-application ansi-escape
我正在构建一个轻量级的ncurses库.到目前为止,它与VT100兼容终端的效果非常好,但是win32控制台无法将\033代码识别为转义序列的开头:
# include <stdio.h>
# include "term.h"
int main(void) {
puts(BOLD COLOR(FG, RED) "Bold text" NOT_BOLD " is cool!" CLEAR);
return 0;
}
Run Code Online (Sandbox Code Playgroud)

为了加载ANSI.SYS驱动程序并识别ANSI/VT100转义序列,需要在C代码级别上做什么?
Fra*_*ini 60
[更新]有关最新的Windows 10,请阅读@ brainslugs83的有用贡献,如下面对此答案的评论.
对于之前的版本Windows 10 Anniversary Update:
ANSI.SYS有一个限制,它只能在Windows 95-Vista下的MS-DOS子系统的上下文中运行.
Microsoft KB101875解释了如何在命令窗口中启用ANSI.SYS,但它不适用于Windows NT.根据文章:我们都喜欢颜色,现代版本的Windows没有这种漂亮的ANSI支持.
相反,Microsoft创建了许多功能,但这远远不是您需要操作ANSI/VT100转义序列.
有关更详细的说明,请参阅Wikipedia文章:
ANSI.SYS也适用于NT衍生系统,用于在NTVDM下执行的16位遗留程序.
Win32控制台根本不支持ANSI转义序列.然而,Ansicon等软件可以作为标准Win32控制台的包装,并添加对ANSI转义序列的支持.
所以我认为 Jason Hood的ANSICON是你的解决方案.它是用C语言编写的,支持32位和64位版本的Windows,并且可以使用源代码.
我还发现了一些其他类似的问题或帖子,最终已经回答使用ANSICON:
rol*_*lve 37
从Windows 10 TH2(v1511),启动conhost.exe和cmd.exe支持ANSI和VT100转义序列开箱即用(虽然他们必须被启用).
Sta*_*ant 13
从Windows 10开始,您可以使用ENABLE_VIRTUAL_TERMINAL_PROCESSING以启用ANSI转义序列:
https://msdn.microsoft.com/en-us/library/windows/desktop/mt638032(v=vs.85).aspx
小智 12
对于Python 2.7,以下脚本适用于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"
Run Code Online (Sandbox Code Playgroud)
结果应该是:
[35mcolor-test[39m test end
color-test test end
Run Code Online (Sandbox Code Playgroud)
Dan*_*eón 12
基于@BrainSlugs83,您可以使用以下命令行通过注册在当前的 Windows 10 版本上激活:
REG ADD HKCU\CONSOLE /f /v VirtualTerminalLevel /t REG_DWORD /d 1
Run Code Online (Sandbox Code Playgroud)
如果ANSICON不可接受,因为它要求您在系统上安装一些东西,这是一个更轻量级的解决方案,它将ANSI代码解析并转换为相关的Win32 API控制台函数,例如SetConsoleTextAttribute.
https://github.com/mattn/ansicolor-w32.c
小智 7
在最新的win10中,可以通过SetConsoleMode(originMode | ENABLE_VIRTUAL_TERMINAL_PROCESSING). 请参阅https://learn.microsoft.com/en-us/windows/console/console-virtual-terminal-sequences#example
有关您需要的cmd着色Windows.h和使用SetConsoleTextAttribute()更多详细信息,请访问http://msdn.microsoft.com/en-us/library/windows/desktop/ms686047%28v=vs.85%29.aspx