在现代 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");

结果: