用C代码设置Windows控制台颜色
Windows控制台颜色
windows控制台中使用COLOR命令设置颜色,使用 COLOR -h 查看具体颜色值。
颜色说明
终端的颜色使用1个字节表示,高4位表示背景色,低4位表示前景色。颜色值范围为0-F,共16种颜色,分别为:
0 = 黑色 8 = 灰色 1 = 蓝色 9 = 淡蓝色 2 = 绿色 A = 淡绿色 3 = 浅绿色 B = 淡浅绿色 4 = 红色 C = 淡红色 5 = 紫色 D = 淡紫色 6 = 黄色 E = 淡黄色 7 = 白色 F = 亮白色
背景色和前景色可以互相搭配,比如蓝色背景,淡黄色文字表示为0x1D。
颜色示例
命令提示符
WindowsTerminal终端
由于 WindowsTerminal终端可以自定义配色方案,因此显示的颜色与旧版的命令提示符显示的会有不同。
编程设置控制台颜色
使用Windows控制台API函数SetConsoleTextAttribute设置控制台颜色。
BOOL WINAPI SetConsoleTextAttribute( _In_ HANDLE hConsoleOutput, _In_ WORD wAttributes ); 参数 hConsoleOutput [进] 控制台屏幕缓冲区的句柄。 该句柄必须具有 GENERIC_READ 访问权限。 wAttributes [in] 字符属性。
上面函数中要用到控制台句柄,使用Windows控制台API函数GetStdHandle获取控制台句柄。
GetStdHandle 函数 HANDLE WINAPI GetStdHandle( _In_ DWORD nStdHandle ); 参数 nStdHandle [进] 标准设备。 此参数的取值可为下列值之一: 值 含义 STD_INPUT_HANDLE((DWORD)-10) 标准输入设备。 最初,这是输入缓冲区 CONIN$ 的控制台。 STD_OUTPUT_HANDLE((DWORD)-11) 标准输出设备。 最初,这是活动控制台屏幕缓冲区 CONOUT$。 STD_ERROR_HANDLE((DWORD)-12) 标准错误设备。 最初,这是活动控制台屏幕缓冲区 CONOUT$。
C代码
上面图片中各种颜色的实现代码,使用C语言设置控制台颜色。
#include <stdio.h> #include <windows.h> //更改文字颜色 // color为每一种颜色所代表的数字,范围是0~15 void setColor(WORD color) { HANDLE HOutput = GetStdHandle(STD_OUTPUT_HANDLE); //获取标准输出的句柄 SetConsoleTextAttribute(HOutput, color); //设置颜色 } int main() { char *CLRNAME[] = { "黑色", "蓝色", "绿色", "浅绿色", "红色", "紫色", "黄色", "白色", "灰色", "淡蓝色", "淡绿色", "淡浅绿色", "淡红色", "淡紫色", "淡黄色", "亮白色", }; printf("\n\n\t\t\t\t控制台文字颜色代码:"); printf("\n\n"); for (int i = 0; i <= 7; i++) { printf("\t\t"); setColor(i == 0 ? 0xE0 : i); printf("%2X %-8s 海阔天空\t", i, CLRNAME[i]); setColor(i + 8); printf("\t%2X %-8s 海阔天空\n", i + 8, CLRNAME[i + 8]); } setColor(0x07); //默认颜色 printf("\n\n\t\t\t\t控制台背景颜色代码:"); printf("\n\n"); for (int i = 0; i <= 7; i++) { printf("\t\t"); setColor((i << 4) + (i == 0 ? 0xE : 0)); //把颜色值移到高位设置成背景色 printf("%2X %-20s\t", i, CLRNAME[i]); setColor(0x07); printf("\t"); setColor((i + 8) << 4); printf("%2X %-20s\n", i + 8, CLRNAME[i + 8]); setColor(0x07); } return 0; }