Как получить управляющие коды ANSI для вывода цветных выходов терминала на консоли CMD Windows с помощью консольного приложения C ++?
Это то, что я пробовал до сих пор:
#include <windows.h>
#ifndef ENABLE_VIRTUAL_TERMINAL_PROCESSING
#define ENABLE_VIRTUAL_TERMINAL_PROCESSING 0x0004
#endif
int main()
{
HANDLE h = GetStdHandle(STD_INPUT_HANDLE);
SetConsoleMode(h, ENABLE_VIRTUAL_TERMINAL_PROCESSING);
printf("%c[%dm foo!\n", 0x1B, 32); // 1
printf("\e[31m foo \e[0m bar\n"); // 2
printf("^\u0001b[31m foo \u0001b[0m bar\n"); // 3
printf("^[[31m foo"); // 4
printf("\033[1;31m foo \e[0m bar\n"); // 5
};
- После этот поток , в C ++,
printf("%c[%dmHELLO!\n", 0x1B, 32);
должен работать, но это не так 't - для меня это выводит [32MHELLO!
. printf("\e[31m foo \e[0m bar");
должен выводить красный foo
и значение по умолчанию bar
, но просто печатает ?[31m foo ?[0m bar
. - Замена
\e
на \u001b
ничего не делает. - Копирование работающей строки из окна cmd
^[[31m foo
и использование ее в printf - Переход с другим escape-символом,
printf("\033[1;32m foo \e[0m bar");
Я также протестировал Выведите, используя printf("foo")
и std::out << "foo";
для всех примеров, перечисленных выше. Ничего не работает Я мог бы понять, не были ли поддержаны полные цвета XTERM, но, по моему мнению, ANSI является базовым c ожиданием. Насколько я знаю, коды ANSI поддерживаются в окне командной строки по умолчанию. Вот почему я запутался по этому поводу.
ctrl + [, за которым следует 31m
в окне Windows CMD, позволяет использовать ANSI окраску в окно - так почему я не могу сделать это из C ++?
Это не особенно актуальная проблема, но она все равно беспокоит меня. Я уверен, что это возможно, но я просто не могу заставить его работать.