使用API修改控制台输出的颜色(前景色和背景色)

1、api原型 SetConsoleTextAttribute

BOOL WINAPI SetConsoleTextAttribute(
  _In_  HANDLE hConsoleOutput,  // 控制台输出流句柄
  _In_  WORD wAttributes        // 设置属性
);

hConsoleOutput [输入参数]

控制台屏幕的输出流的句柄(handle to console screen buffer)。

这个文件流的句柄必须有写入(GENERIC_READ)的权限。更多的信息,请查看MSDN上的Console Buffer Security and Access Rights

wAttributes [输入参数]

具体常见设置属性如下:

属性 意义
FOREGROUND_BLUE 前景色包含 蓝色
FOREGROUND_GREEN 前景色包含 绿色
FOREGROUND_RED 前景色包含 红色
FOREGROUND_INTENSITY 前景色加强
BACKGROUND_BLUE 背景色包含 蓝色
BACKGROUND_GREEN 背景色包含 绿色
BACKGROUND_RED 背景色包含 红色
BACKGROUND_INTENSITY 背景色加强
COMMON_LVB_GRID_HORIZONTAL 顶部水平网格
COMMON_LVB_GRID_LVERTICAL 左竖直网格
COMMON_LVB_GRID_RVERTICAL 右竖直网格
COMMON_LVB_UNDERSCORE 下划线

2、代码测试

#include <windows.h>
#include <stdio.h>
#include <stdlib.h>

int main()
{
    HANDLE hOut;  

    //  获取输出流的句柄
    hOut = GetStdHandle(STD_OUTPUT_HANDLE);    

    printf("普通颜色看看\n");

    SetConsoleTextAttribute(hOut,
                            FOREGROUND_GREEN |      // 前景色_绿色
                            FOREGROUND_INTENSITY ); // 前景色_加强
    printf("设置了浅绿色.\n");
    printf("并且完了之后就一直是浅绿色\n");

    SetConsoleTextAttribute(hOut,
                            FOREGROUND_BLUE |       // 前景色_蓝色
                            FOREGROUND_INTENSITY |  // 前景色_加强
                            COMMON_LVB_UNDERSCORE); // 添加下划线
    printf("文字蓝色,再加个下划线.\n");    

    SetConsoleTextAttribute(hOut,
                            FOREGROUND_RED |        // 前景色_红色
                            FOREGROUND_INTENSITY |  // 前景色_加强
                            BACKGROUND_BLUE );      // 背景色_蓝色
    printf("设置文字红色,背景蓝色\n");  

    SetConsoleTextAttribute(hOut,
                            FOREGROUND_RED |            // 前景色_红色
                            FOREGROUND_INTENSITY |      // 前景色_加强
                            COMMON_LVB_GRID_LVERTICAL );// 网格_左_竖
    printf("                      加 左 网格\n");  

    SetConsoleTextAttribute(hOut,
                            FOREGROUND_RED |            // 前景色_红色
                            FOREGROUND_INTENSITY |      // 前景色_加强
                            COMMON_LVB_GRID_RVERTICAL );// 网格_右_竖
    printf("                      加 右 网格\n");    

    SetConsoleTextAttribute(hOut,
                            FOREGROUND_RED |    // 前景色_红色
                            FOREGROUND_GREEN |  // 前景色_绿色
                            FOREGROUND_BLUE );  // 前景色_蓝色
    printf("改回白色\n");  

    system("pause");
    return 0;
}

例如紫色可以用 蓝色+红色 配出来:

#include <windows.h>
#include <stdio.h>    // for printf
#include <stdlib.h>   // for system

int main()
{
    HANDLE hOut;  

    //  获取输出流的句柄
    hOut = GetStdHandle(STD_OUTPUT_HANDLE);    

    SetConsoleTextAttribute(hOut,
                            FOREGROUND_RED |  // 前景色_红色
                            FOREGROUND_BLUE | // 前景色_蓝色
                            FOREGROUND_INTENSITY);// 加强
    printf(" 红 + 蓝 = 紫色 ^_^\n");  

    system("pause");
    return 0;
}  

转载自:Lellansin‘s 冰森

时间: 2024-11-11 23:09:38

使用API修改控制台输出的颜色(前景色和背景色)的相关文章

C/C++ 修改控制台程序文字颜色

可以修改前景色(字体颜色)和背景色. 示例代码如下: #include <iostream> #include <Windows.h> //需要引用Windows.h using namespace std; int _tmain(int argc, _TCHAR* argv[]) { HANDLE hConsole; hConsole = GetStdHandle(STD_OUTPUT_HANDLE); for(int i=255;i>=0;i--) { SetConsol

windows API之控制台界面

windows API之控制台界面 tkorays ([email protected]) 在windows里面,用户界面包括控制台(Console)形式的和窗口(Window)形式的.控制台形式的界面我们也是经常接触的,不就是那个黑色的框框吗?但是我们并没有直接使用Windows API,通常我们调用printf来输出.scanf来输入.实际上,这个c语言函数也是通过Windows API来实现的.不信的话,可以打开crtdll.dll查看里面的字符串. 关于Console的API不是很多,主

自定义SpringBoot控制台输出的图案

pringboot启动的时候,控制台输出的图案叫banner banner?啥玩意儿?相信有些人,一定是一脸懵逼... ——这个就不陌生了吧,这个是我们启动springboot的时候,控制台输出的... 一开始我在接触jeesite这个开源项目的时候,觉得很奇怪, 为什么人家是springboot,我也是springboot, 人家显示的是jeesite,我是spring! 后来,好奇宝宝去查了一下,原来这个是可以自定义的,哈哈... 小可爱应该知道好奇宝宝要做啥了吧~ 怎么改写这个banner

修改控制台终端字体(tty)

默认字体不好分辨,修改: sudo dpkg-reconfigure console-setup 选择:utf-8,Guess...,VGA,8X16. 默认的ls的目录颜色也太深,看不清楚,修改成绿色,命令行颜色也改一下,在~/.profile中添加: 前景色:30黑 31红 32绿 33黄 34蓝 35紫 36青 37白 背景色:40黑 41红 42绿 43黄 44青 45蓝 46青 47白 文件类型   (1)直接用,有以下几种:        no   NORMAL, NORM 全局默认

控制台输出是什么回事

1.控制台输出,是指程序运行过程中,将一些信息,output出来,用输出流,可以输出到指定文件或者控制台. 2.日志信息,就是程序中的标准input/output stream,只是将i/o的目的地输出到console这个程序而已. 3.console是个单独的系统程序,console是单独的程序,否则怎么动态输出log信息?是的,console底层就是c语言的printf . 4.大部分ide开发环境也都提供了自己console程序,比如eclipse和tomcat.要打印程序的log信息,只

grep输出带有颜色设置

grep命令执行后,终端上输出显示颜色可以加"--color=auto"的参数. 另外的两个办法是: 1.设置环境变量: export GREP_OPTIONS="--color=auto" 2.修改.bashrc 给grep起别名,用alias设置 现在把他打开,看到84行: 84 alias grep='grep --color=auto' 85 #alias fgrep='fgrep --color=auto' 86 #alias egrep='egrep -

jenkins控制台输出乱码

根据以往写代码的经验,jenkins控制台输出乱码有可能是编码导致的,问了一下度娘,果然如此,解决办法如下:修改下jenkins的配置文件,设置字符编码为:UTF-8即可,打开jenkins的安装目录,找到jenkins.xml文件,在<arguments>标签处添加红色字体,即定义编码为utf-8<arguments>-Xrs -Xmx512m -Dfile.encoding=utf-8 -Dhudson.lifecycle=hudson.lifecycle.WindowsSer

控制台输出彩色样式

没错,就是这么无聊,给console的文字添加样式.你以为你真的了解console.log吗?不,你只是把它当成了alert的替代品,多的是你不知道的事. 在正常模式下,一般只能向console 控制台输出简单的文字信息.为了让显示友好一点,可以用console.warn()来输出警告信息,也可以用console.error()来输出错误信息. 笔者以前也只是认为console只有这几种样式,无意中发现居然还能自己添加样式,顿时感觉发现了新大陆. 下面是console.log() API的官方文

Qt 5.3更新无数,更改C++控制台输出最为赞

本人觉得有了这个更新,Qt Creator可谓几乎没有缺点了,起码仅仅开发C/C++,是不用再去安装VS了. Qt 5.3放出,更新无数,具体参考: http://qt-project.org/wiki/New-Features-in-Qt-5.3 有一个功能,属于超级好的改进了,就是C++控制台程序的输出,不再是弹出一个CMD,执行程序,而是直接在应用程序输出结果: 这个修改,让我振奋不已,以前弹出CMD,经常提示找不到句柄,程序无法结束.这个Bug我一直难以接受! Many thanks.