我知道如何设置它们(SetConsoleTextAttribute)但是没有GetConsoleTextAttribute来检索这些信息。在未受影响的控制台上,它应该是int 7。
问题是当从设置文本颜色的程序退出时,它在给定窗口运行的时间内保持不变,并且我不能假设用户没有将颜色设置为他的自定义喜欢。
答案 0 :(得分:7)
感谢Talent25,我做了这个功能:
#include <Windows.h>
bool GetColor(short &ret){
CONSOLE_SCREEN_BUFFER_INFO info;
if (!GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), &info))
return false;
ret = info.wAttributes;
return true;
}
使用它:
GetColor(CurrentColor);
CurrentColor - 输出颜色数的变量(背景* 16 +主色)。返回值通知操作是否成功。
答案 1 :(得分:6)
wincon.h
的快速grep显示CONSOLE_SCREEN_BUFFER_INFO
有一个wAttributes
成员documented as“WriteFile和WriteConsole写入屏幕缓冲区的字符的属性函数,或由ReadFile和ReadConsole函数回显到屏幕缓冲区。“这匹配the description of SetConsoleTextAttribute
:“设置由WriteFile或WriteConsole函数写入控制台屏幕缓冲区的字符的属性,或由ReadFile或ReadConsole函数回显的字符的属性。”结构由GetConsoleScreenBufferInfo
返回。
答案 2 :(得分:4)
以下是代码段。
HANDLE m_hConsole;
WORD m_currentConsoleAttr;
CONSOLE_SCREEN_BUFFER_INFO csbi;
//retrieve and save the current attributes
m_hConsole=GetStdHandle(STD_OUTPUT_HANDLE);
if(GetConsoleScreenBufferInfo(m_hConsole, &csbi))
m_currentConsoleAttr = csbi.wAttributes;
//change the attribute to what you like
SetConsoleTextAttribute (
m_hConsole,
FOREGROUND_RED |
FOREGROUND_GREEN);
//set the ttribute to the original one
SetConsoleTextAttribute (
m_hConsole,
m_currentConsoleAttr);
希望这有帮助。