用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;
}

