zoukankan      html  css  js  c++  java
  • 使用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("普通颜色看看
    ");
     
        SetConsoleTextAttribute(hOut,  
                                FOREGROUND_GREEN |      // 前景色_绿色
                                FOREGROUND_INTENSITY ); // 前景色_加强
        printf("设置了浅绿色.
    ");  
        printf("并且完了之后就一直是浅绿色
    ");
     
        SetConsoleTextAttribute(hOut,  
                                FOREGROUND_BLUE |       // 前景色_蓝色
                                FOREGROUND_INTENSITY |  // 前景色_加强
                                COMMON_LVB_UNDERSCORE); // 添加下划线
        printf("文字蓝色,再加个下划线.
    ");    
     
        SetConsoleTextAttribute(hOut,  
                                FOREGROUND_RED |        // 前景色_红色
                                FOREGROUND_INTENSITY |  // 前景色_加强
                                BACKGROUND_BLUE );      // 背景色_蓝色
        printf("设置文字红色,背景蓝色
    ");  
     
        SetConsoleTextAttribute(hOut,  
                                FOREGROUND_RED |            // 前景色_红色
                                FOREGROUND_INTENSITY |      // 前景色_加强
                                COMMON_LVB_GRID_LVERTICAL );// 网格_左_竖
        printf("                      加 左 网格
    ");  
     
        SetConsoleTextAttribute(hOut,  
                                FOREGROUND_RED |            // 前景色_红色
                                FOREGROUND_INTENSITY |      // 前景色_加强
                                COMMON_LVB_GRID_RVERTICAL );// 网格_右_竖  
        printf("                      加 右 网格
    ");    
     
        SetConsoleTextAttribute(hOut,  
                                FOREGROUND_RED |    // 前景色_红色
                                FOREGROUND_GREEN |  // 前景色_绿色
                                FOREGROUND_BLUE );  // 前景色_蓝色
        printf("改回白色
    ");  
     
        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(" 红 + 蓝 = 紫色 ^_^
    ");  
     
        system("pause");
        return 0;  
    }  
    View Code

    转载自:Lellansin's 冰森

  • 相关阅读:
    jquery中$.get()提交和$.post()提交有区别吗?
    src = "security/afafsff/?ip=123.4.56.78&id=45",请写一段代码用正则匹配出ip
    python如何捕获异常
    平衡点问题
    支配点问题:
    python程序中文输出问题怎么解决? 用encode和decode
    介绍一下Python中webbrowser的用法?
    XML文档定义有几种形式?它们之间有何本质区别?解析XML文档有哪几种方式?
    垃圾回收的优点和原理。并考虑2种回收机制。
    设计4个线程,其中两个线程每次对j增加1,另外两个线程对j每次减少1。写出程序。
  • 原文地址:https://www.cnblogs.com/lovelp/p/setconsoletextattribute.html
Copyright © 2011-2022 走看看