最近我在终端中摆弄颜色。
我正在使用here中的示例程序在不同的控制台中进行测试。
在 Microsoft Store 的
Windows Terminal
中,您可以看到颜色:
下面是完全相同的程序,但在
cmd.exe
中你看不到颜色。
然而,在同一个控制台中,当我运行命令
gcc
时,我确实得到了额外的颜色(实际上是白色和红色):
现在我的问题是,
gcc
有什么不同之处,仍然能够打印彩色文本?除了上面链接的网站上写的以外,我找不到任何其他方法可以在控制台上获取彩色文本。
这个问题可以帮助你:
在
cmd.exe
屏幕截图中,您没有禁用旧版控制台模式。
这是您需要的功能列表(在本例中我们使用红绿):
GetConsoleScreenBufferInfo
并将 lpConsoleScreenBufferInfo->dwCursorPosition
传递给 WriteConsoleOutputAttribute()
,然后使用 WriteConsoleOutputCharacter
并将相同的长度传递给 nLength
。
代码:HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
CONSOLE_SCREEN_BUFFER_INFO consoleBuffer;
GetConsoleScreenBufferInfo (hStdOut, &consoleBuffer);
TCHAR string = "AABBCCDDEEFFGG";
int length = 12; // or use string functions
DWORD written;
WriteConsoleOutputAttribute(hStdOut, consoleBuffer.dwCursorPosition, FOREGROUND_RED | BACKGROUND_GREEN, length, consoleBuffer.dwCursorPosition, &written);
WriteConsoleOutputCharacter(hStdOut, &string, length, consoleBuffer.dwCursorPosition, &written);
system("color 0F")
或使用GetConsoleScreenBufferInfo
并将lpConsoleScreenBufferInfo->dwCursorPosition
传递给SetConsoleTextAttribute()
函数。
SetConsoleTextAttribute()
的代码:HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
CONSOLE_SCREEN_BUFFER_INFO consoleBuffer;
TCHAR string = "AABBCCDDEEFFGG";
int length = 12; // or use string functions
DWORD written;
GetConsoleScreenBufferInfo(hStdOut, &consoleBuffer);
SetConsoleTextAttribute(hStdOut, FOREGROUND_RED | BACKGROUND_GREEN);
DWORD written;
WriteConsoleOutputCharacter(hStdOut, &string, length, consoleBuffer.dwCursorPosition, &written);
WriteConsole()
代替使用 WriteConsoleOutputCharacter()
功能。