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

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

编程学习2022-11-0668050


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

分享给朋友:

相关文章

SHFileOperation介绍

SHFileOperation介绍

SHFileOperation函数功能描述:文件操作,与 Shell 的动作相同.函数原型:#include<shellapi.h> WINSHELLAPI int WINAPI SHFileOperation(LPSHFILEOPSTRUCT lpFileOp);参数:typedef struct _SHFILEOPSTRUCT { HWND hwnd; //父窗口句柄 UINT wFu...

HTML与ASCII码表

HTML与ASCII码表

HTML与ASCII码表Standard ASCII set, HTML Entity names, ISO 10646, ISO 8879, ISO 8859-1  Latin alphabet No. 1Browser support: All browsersASCIIHTMLHTMLDecHexSymbolNumberNameDescription32333435363738394041424344454647202122232425262728292A2B...

用vb模拟键盘

用vb模拟键盘

  键盘是我们使用计算机的一个很重要的输入设备了,即使在鼠标大行其道的今天,很多程序依然离不开键盘来操作。但是有时候,一些重复性的,很繁琐的键盘操作总会让人疲惫,于是就有了用程序来代替人们按键的方法,这样可以把很多重复性的键盘操作交给程序来模拟,省了很多精力,按键精灵就是这样的一个软件。那么我们怎样才能用VB来写一个程序,达到与按键精灵类似的功能呢?那就让我们来先了解一下windows中响应键盘事件的机制。   当用户按下键盘上的一个键时,键盘内的芯片会...

[转].NET实现中英文验证码

[转].NET实现中英文验证码

最终效果如图:  CheckCode.aspx.cs代码如下protected void Page_Load(object sender, EventArgs e) { //获取GB2312编码页(表) /**//** * 生成中文验证验码所要使用的方法 * 注,生成中文验证码时要改变一下生成验证码图片的宽度 * var imageCode = new System.Drawing.Bitmap((int)Math....