Форум программистов, компьютерный форум CyberForum.ru

Получить цвет фона экрана консольного окна (можно и методами WinAPI) - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.60
vendeme
 Аватар для vendeme
-32 / 3 / 3
Регистрация: 22.06.2011
Сообщений: 88
14.08.2012, 06:30     Получить цвет фона экрана консольного окна (можно и методами WinAPI) #1
Привет.
Как получить цвет (фона экрана) консольного окна?
Можно и методами WinAPI. С меня печенька
Миниатюры
Получить цвет фона экрана консольного окна (можно и методами WinAPI)  
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.08.2012, 06:30     Получить цвет фона экрана консольного окна (можно и методами WinAPI)
Посмотрите здесь:

Цвет фона консоли с++ C++
C++ Цвет фона строки
Цвет шрифта и фона в консоли... C++
Получить снимок клиентской области окна и цвет пикселя C++
Движение курсора мыши должно плавно менять цвет фона окна. C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
nexen
187 / 180 / 3
Регистрация: 27.01.2012
Сообщений: 1,335
14.08.2012, 07:23     Получить цвет фона экрана консольного окна (можно и методами WinAPI) #2
vendeme,
C++
1
2
3
4
DWORD WINAPI GetClassLong(
  __in  HWND hWnd,
  __in  int nIndex
);
где nIndex = GCL_HBRBACKGROUND. А из него уже цвет получаешь

Добавлено через 3 минуты
Ещё можно по тупому :
C++
1
2
3
4
5
COLORREF GetPixel(
  __in  HDC hdc,
  __in  int nXPos,
  __in  int nYPos
);
vendeme
 Аватар для vendeme
-32 / 3 / 3
Регистрация: 22.06.2011
Сообщений: 88
14.08.2012, 07:37  [ТС]     Получить цвет фона экрана консольного окна (можно и методами WinAPI) #3
Оба функций пригодятся, спасибо
bigredcat
364 / 311 / 3
Регистрация: 24.02.2011
Сообщений: 1,512
Записей в блоге: 1
14.08.2012, 08:12     Получить цвет фона экрана консольного окна (можно и методами WinAPI) #4
Вообще при работе с консолью, для решения этой задачи нужно использовать GetStdHandle, GetConsoleScreenBufferInfo, CONSOLE_SCREEN_BUFFER_INFO
vendeme
 Аватар для vendeme
-32 / 3 / 3
Регистрация: 22.06.2011
Сообщений: 88
14.08.2012, 08:12  [ТС]     Получить цвет фона экрана консольного окна (можно и методами WinAPI) #5
Не пойму, почему не получается, когда я его меняю через свойства
C++
1
2
3
4
5
6
7
8
int main()
{
    while(1)
    {
        std::cout << GetClassLong(GetConsoleWindow(), GCL_HBRBACKGROUND) << std::endl;
        Sleep(1000);
    }
}
rescr1pt
31 / 32 / 1
Регистрация: 03.10.2011
Сообщений: 61
14.08.2012, 08:25     Получить цвет фона экрана консольного окна (можно и методами WinAPI) #6
C++
1
2
3
4
5
6
WORD GetConsoleHandleColor()
{
    CONSOLE_SCREEN_BUFFER_INFO csbf;
    GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), &csbf);
    return csbf.wAttributes;
}
vendeme
 Аватар для vendeme
-32 / 3 / 3
Регистрация: 22.06.2011
Сообщений: 88
14.08.2012, 08:26  [ТС]     Получить цвет фона экрана консольного окна (можно и методами WinAPI) #7
Цитата Сообщение от rescr1pt Посмотреть сообщение
C++
1
2
3
4
5
6
WORD GetConsoleHandleColor()
{
    CONSOLE_SCREEN_BUFFER_INFO csbf;
    GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), &csbf);
    return csbf.wAttributes;
}
Благодарю, заработало
bigredcat
364 / 311 / 3
Регистрация: 24.02.2011
Сообщений: 1,512
Записей в блоге: 1
14.08.2012, 08:33     Получить цвет фона экрана консольного окна (можно и методами WinAPI) #8
Вот пример старый нашел
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
#include <tchar.h>
#include <windows.h>
#include <iostream>
 
 
//
// Тип данных для хранения цвета.
//
typedef unsigned short COLOR;
 
 
//
// Исходные составляющие цвета, используемые для экрана консоли.
//
#define COLOR_BLACK 0x0000
#define COLOR_BLUE  0x0001
#define COLOR_GREEN 0x0002
#define COLOR_RED   0x0004
#define COLOR_HIGH  0x0008
 
 
//
// Маски текстовых атрибутов.
//
#define BACKCOLOR_MASK 0x00F0
#define FORECOLOR_MASK 0x000F
#define OTHERATTR_MASK 0xFF00
 
 
//
// Перечесление цветов, используемых для экрана консоли.
// (Вместо class можно оформить в виде enum).
//
class Color
{
public:
    static COLOR const Black        = COLOR_BLACK;
    static COLOR const Blue         = COLOR_BLUE;
    static COLOR const Green        = COLOR_GREEN;
    static COLOR const Cyan         = COLOR_BLUE  | COLOR_GREEN;
    static COLOR const Red          = COLOR_RED;
    static COLOR const Magenta      = COLOR_BLUE  | COLOR_RED;
    static COLOR const Brawn        = COLOR_GREEN | COLOR_RED;
    static COLOR const Gray         = COLOR_BLUE  | COLOR_GREEN | COLOR_RED;
    static COLOR const DarkGray     = COLOR_HIGH;
    static COLOR const LightBlue    = COLOR_BLUE  | COLOR_HIGH;
    static COLOR const LightGreen   = COLOR_GREEN | COLOR_HIGH;
    static COLOR const LightCyan    = COLOR_BLUE  | COLOR_GREEN | COLOR_HIGH;
    static COLOR const LightRed     = COLOR_RED   | COLOR_HIGH;
    static COLOR const LightMagenta = COLOR_BLUE  | COLOR_RED   | COLOR_HIGH;
    static COLOR const Yellow       = COLOR_GREEN | COLOR_RED   | COLOR_HIGH;
    static COLOR const White        = COLOR_BLUE  | COLOR_GREEN | COLOR_RED  | COLOR_HIGH;
};
 
 
//
// Получение цвета фона из атрибутов текста.
//
inline WORD GetConsoleBackColor(WORD attr)
{
    return ((attr & BACKCOLOR_MASK) >> 4);
}
 
//
// Получение цвета символа из атрибутов текста.
//
inline WORD GetConsoleForeColor(WORD attr)
{
    return (attr & FORECOLOR_MASK);
}
 
//
// Получение прочих атрибутов текста.
//
inline WORD GetConsoleOtherAttr(WORD attr)
{
    return ((attr & OTHERATTR_MASK) >> 8);
}
 
//
// Объединение цвета символа, цвета фона и прочих атрибутов текста.
//
inline WORD MergeConsoleAttr(WORD fore, WORD back, WORD attr)
{
    return (fore | (back << 4) | (attr << 8));
}
 
 
//
// Вывод названия цвета.
//
void OutputColorName(COLOR color)
{
    using std::cout;
 
    switch (color)
    {
    case Color::Black:        cout << "Black";         break;
    case Color::Blue:         cout << "Blue";          break;
    case Color::Green:        cout << "Green";         break;
    case Color::Cyan:         cout << "Cyan";          break;
    case Color::Red:          cout << "Red";           break;
    case Color::Magenta:      cout << "Magenta";       break;
    case Color::Brawn:        cout << "Brawn";         break;
    case Color::Gray:         cout << "Gray";          break;
    case Color::DarkGray:     cout << "Dark Gray";     break;
    case Color::LightBlue:    cout << "Light Blue";    break;
    case Color::LightGreen:   cout << "Light Green";   break;
    case Color::LightCyan:    cout << "Light Cyan";    break;
    case Color::LightRed:     cout << "Light Red";     break;
    case Color::LightMagenta: cout << "Light Magenta"; break;
    case Color::Yellow:       cout << "Yellow";        break;
    case Color::White:        cout << "White";         break;
    }
}
 
 
int _tmain()
{
    using namespace std;
 
    // Описатель стандартного устройства вывода.
    HANDLE stdOut = GetStdHandle(STD_OUTPUT_HANDLE);
    if (stdOut == INVALID_HANDLE_VALUE)
        return GetLastError();
 
    // Сведения об экранном буфере стандартного устройства вывода.
    CONSOLE_SCREEN_BUFFER_INFO scrBufInfo = {{0}, {0}, 0, {0}, {0}};
    if (GetConsoleScreenBufferInfo(stdOut, &scrBufInfo) == FALSE)
        return GetLastError();
 
    // Текущий цвет фона.
    COLOR backColor = GetConsoleBackColor(scrBufInfo.wAttributes);
    cout << "Back color: "; OutputColorName(backColor); cout << endl;
 
    // Текущий цвет текста.
    COLOR foreColor = GetConsoleForeColor(scrBufInfo.wAttributes);
    cout << "Fore color: "; OutputColorName(foreColor); cout << endl;
 
    system("PAUSE");
 
    return 0;
}
yleart
14.08.2012, 09:29
  #9

Не по теме:

не то написал..

MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.08.2012, 03:01     Получить цвет фона экрана консольного окна (можно и методами WinAPI)
Еще ссылки по теме:

Развертывание консольного окна C++
C++ Получить размер консольного окна
Приведите пример, как можно связать знания консольного C++ (где алгоритмы, структуры, массивы) с WinAPI? C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
vendeme
 Аватар для vendeme
-32 / 3 / 3
Регистрация: 22.06.2011
Сообщений: 88
15.08.2012, 03:01  [ТС]     Получить цвет фона экрана консольного окна (можно и методами WinAPI) #10
а можешь показать Set функций?
C++
1
2
3
void SetBackColor(WORD color);
void SetForeColor(WORD color);
void SetOtherColor(WORD color);
Yandex
Объявления
15.08.2012, 03:01     Получить цвет фона экрана консольного окна (можно и методами WinAPI)
Ответ Создать тему
Опции темы

Текущее время: 03:44. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru