当前位置:首页 > 编程学习 > 用C代码设置Windows控制台颜色

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

编程学习2022-11-0648380


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。

颜色示例

命令提示符

命令提示符 用C代码设置Windows控制台颜色  编程 电脑 技术 第1张

WindowsTerminal终端

WindowsTerminal终端 用C代码设置Windows控制台颜色  编程 电脑 技术 第2张


由于 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;
}




扫描二维码推送至手机访问。

版权声明:本文由海阔天空发布,如需转载请注明出处。

本文链接:https://www.apull.net/html/20221106222055.html

分享给朋友:

相关文章

年纪偏大是否适合学习计算机

年纪偏大是否适合学习计算机

★年纪偏大是否适合学习计算机  Q:我本科不是学计算机专业。但是我对计算机的兴趣很大,想明年考北京大学计算机软件的研究生!请问像我这样快30岁的人了,才开始学习计算机是不是太晚了?  A:中国很多人相信程序员是吃青春饭的。 这主要是由中国软件水平发展的现状决定的。 1、大部分都做的是行业管理方面的软件,从计算机技术上说很快就可以进入。 2、很多公司没有管理和技术双重的提升机制,使得人们觉得做管理比做技术有前途,但是仍...

 C++ string类常用函数

C++ string类常用函数

string类的构造函数:string(const char *s);    //用c字符串s初始化 string(int n,char  c);     //用n个字符c初始化此外,string类还支持默认构造函数和复制构造函数,如string s1;string  s2="hello";都是正确的写法。...

VB连接SQLServer数据库操作代码

VB连接SQLServer数据库操作代码

第一步,在ModConString模块中定义一系列变量'定义一个属性过程反映连接字符串Public Property Get conString() As Variant conString = "data source=.;initial catalog=Sims_four;user End Property'定义一个提供者反映数据库类型Public Property Get conProvide() As Variant co...

VB.NET关于加密算法

VB.NET关于加密算法

加密将防止数据被查看或修改,并在原本不安全的信道上提供安全的通信信道,它达到以下目的:  保密性:防止用户的标识或数据被读取。  数据完整性:防止数据被更改。  身份验证:确保数据发自特定的一方。  基本概念  1、散列(HASH)函数  散列(HASH)函数H也称哈希函数或杂凑函数等,是典型的多到一的函数,其输入为一可变长x(可以足够的长),输出一固定长的串h(一般为128位、160位,比输入的串短),该串h被称为输入x的Hash值(或称消息摘要Message  ...

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。