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

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

编程学习2022-11-0648920


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

分享给朋友:

相关文章

为什么每个程序员都应该学习C语言

为什么每个程序员都应该学习C语言

为什么每个程序员都应该学习C语言 每个程序员在他们的编程生涯中都应该学习C语言,因为它有太多难以忽视的好处了。除了它会给你提供更多的工作机会之外,C语言还会教给你更多的关于计算机的知识。它能给我们提供的裨益,简单列举如下:   1)相比较其他的编程语言(像C++,JAVA),C语言是个低级语言。从总体上来说,低级的编程语言可以让你更好的了解计算机。   2)设备驱动程序和操作系统只能用C语言来编写。现在,你...

[转] 深入探讨C++中的引用

[转] 深入探讨C++中的引用

  摘要:介绍C++引用的基本概念,通过详细的应用分析与说明,对引用进行全面、透彻地阐述。  关键词:引用,const,多态,指针  引用是C++引入的新语言特性,是C++常用的一个重要内容之一,正确、灵活地使用引用,可以使程序简洁、高效。我在工作中发现,许多人使用它仅仅是想当然,在某些微妙的场合,很容易出错,究其原由,大多因为没有搞清本源。故在本篇中我将对引用进行详细讨论,希望对大家更好地理解和使用引用起到抛砖引玉的作用。  引用简介  引用就是某一变量(目标)的一个别名,...

VB.NET 用ShellExecuteEx 打开系统文件属性对话框 模块

VB.NET 用ShellExecuteEx 打开系统文件属性对话框 模块

' ' VB.NET 调用系统文件属性对话框模块 ' ' by: Apull ' QQ:374237545 ' http://www.apull.net ' 2007-6-9 ' ' Imports System.Runtime.InteropServices     Mod...

致面向对象技术初学者的一封公开信

致面向对象技术初学者的一封公开信

 致面向对象技术初学者的一封公开信 Alistair Cockburn 著(1996 年2 月),袁峰 译介绍 首先我要解释一下为什么会写这封公开信。这似乎已经成了一种习惯,但这个步骤还是需要的。过去6 年中, 我曾经无数次地在饭店、酒吧、旅店大厅等各种地方以同一种方式度过愉快而漫长的夜晚:和同样追求真理、光明和智慧的伙伴一起探讨面向对象的真谛。现在,我已经可以回答很多当年我遇到的问题。这些同样的问题也在困扰着我的一位新同事,在一家饭店里,我花了整整一个晚上和他讨...

发表评论

访客

看不清,换一张

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