Search
Write a publication
Pull to refresh

Цветной вывод в консоли Windows

Иногда хочется или даже полезно немного раскрасить вывод консольной программы :-)
Подробно про API для работы с консолью (достаточно обширный) можно прочитать в MSDN в разделе «WIn32 and COM Development\System Services\SDK-Documentation\DLLs, Processes and Threads\Character-Mode Applications».

Для установки свойств выводимого текста сущетсвует функция SetConsoleTextAttribute. Вот ее прототип: BOOL WINAPI SetConsoleTextAttribute(HANDLE hConsole, WORD wAttributes). Нас будет интересовать слово wAttributes, а точнее константы:

FOREGROUND_RED
FOREGROUND_GREEN
FOREGROUND_BLUE
FOREGROUND_INTENSITY

и

BACKGROUND_RED
BACKGROUND_GREEN
BACKGROUND_BLUE
BACKGROUND_INTENSITY

Комбинируя эти константы при помощи побитового или можно получать цвета, отличные от красного, зеленого и синего. То есть, слово wAttributes аналогично параметру, принимаемому командой COLOR в cmd.exe.

Ну вот собственно и пример:

/*
* DrSmith 2009
* Эта программка демонстрирует возможность
* цветного вывода в консоли Windows :-)
*/

#include <windows.h>
#include <tchar.h>

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
HANDLE hStdIn, hStdOut;
TCHAR *lpszString1 = TEXT(«первая строчка»);
TCHAR *lpszString2 = TEXT(«вторая строчка»);
DWORD dummy;

/* требуем консоль нашему процессу */
if(!AllocConsole()) {
MessageBox(NULL, TEXT(«AllocConsole error.»), TEXT(«Error»), MB_OK MB_ICONERROR);
return 1;
}

/* получаем хэндлы стандартного ввода и вывода */
hStdIn = GetStdHandle(STD_INPUT_HANDLE);
hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);

if(hStdIn == INVALID_HANDLE_VALUE
hStdOut == INVALID_HANDLE_VALUE) {
MessageBox(NULL, TEXT(«GetStdHandle error.»), TEXT(«Error»), MB_OK MB_ICONERROR);
return 2;
}

/* устанавливаем сочный зеленый цвет текста */
SetConsoleTextAttribute(hStdOut, FOREGROUND_GREEN FOREGROUND_INTENSITY);

/* Выводим первую тестовую строчку */
WriteConsole(hStdOut, lpszString1, _tcslen(lpszString1), &dummy, NULL);

/* устанавливаем красный цвет текста на белом фоне */
SetConsoleTextAttribute(hStdOut, FOREGROUND_RED
BACKGROUND_RED BACKGROUND_GREEN BACKGROUND_BLUE BACKGROUND_INTENSITY);

/* Выводим вторую тестовую строчку */
WriteConsole(hStdOut, lpszString2, _tcslen(lpszString2), &dummy, NULL);

Sleep(5000);
return 0;
}
Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.