在现代 Windows 命令行上启用 ANSI 转义码处理? [C]
Enabling ANSI escape code processing on the modern Windows command line? [C]
我听说现代 Windows 控制台支持 ANSI escape codes(颜色),但您必须启用它们。
使用 Windows 10 的 19042.746 版本,使用 SetConsoleMode(consoleHandle, ENABLE_VIRTUAL_TERMINAL_PROCESSING); // from windows.h 启用它应该只是一件简单的事情,但在设置它之后,它仍然不支持 ANSI 转义颜色。我错过了什么?
现实生活中的例子
HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleMode(hConsole, ENABLE_VIRTUAL_TERMINAL_PROCESSING);
printf("3[32mThis is green");
打印出来
[31mThis is green
来源:
您还需要添加ENABLE_PROCESSED_OUTPUT
。需要先使用GetConsoleMode获取当前的模式(通常包含ENABLE_PROCESSED_OUTPUT
),然后在模式中添加ENABLE_VIRTUAL_TERMINAL_PROCESSING
:
HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
DWORD mode = 0;
GetConsoleMode(hConsole, &mode); //
SetConsoleMode(hConsole, mode | ENABLE_VIRTUAL_TERMINAL_PROCESSING);
printf("3[32mThis is green");
结果:
我听说现代 Windows 控制台支持 ANSI escape codes(颜色),但您必须启用它们。
使用 Windows 10 的 19042.746 版本,使用 SetConsoleMode(consoleHandle, ENABLE_VIRTUAL_TERMINAL_PROCESSING); // from windows.h 启用它应该只是一件简单的事情,但在设置它之后,它仍然不支持 ANSI 转义颜色。我错过了什么?
现实生活中的例子
HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleMode(hConsole, ENABLE_VIRTUAL_TERMINAL_PROCESSING);
printf("3[32mThis is green");
打印出来
[31mThis is green
来源:
您还需要添加ENABLE_PROCESSED_OUTPUT
。需要先使用GetConsoleMode获取当前的模式(通常包含ENABLE_PROCESSED_OUTPUT
),然后在模式中添加ENABLE_VIRTUAL_TERMINAL_PROCESSING
:
HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
DWORD mode = 0;
GetConsoleMode(hConsole, &mode); //
SetConsoleMode(hConsole, mode | ENABLE_VIRTUAL_TERMINAL_PROCESSING);
printf("3[32mThis is green");
结果: