用C代码设置Windows控制台颜色

本文介绍Windows控制台中如何使用COLOR命令及API函数SetConsoleTextAttribute设置文本颜色和背景颜色。详细解释了颜色值的组成及其对应的颜色名称,并提供了一个示例程序来展示所有可用的颜色。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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终端
    由于 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$。

代码

上面图片中各种颜色的实现代码


#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;
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

浪客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值