Вывод на консоль цвета в C ++ через msbuild exec

проблема

Мне было легко найти способ установки цветов консоли в C ++ с использованием windows.h и std :: cout. Один такой метод показан здесь:

HANDLE stdout = GetStdHandle(STD_OUTPUT_HANDLE); //get handle of console
CONSOLE_SCREEN_BUFFER_INFO bufferInfo;
GetConsoleScreenBufferInfo(stdout, &bufferInfo); //save current color scheme
SetConsoleTextAttribute(stdout, 0x4); //change console color
std::cout << "This is red text" << std::endl;
SetConsoleTextAttribute(stdout, bufferInfo.wAttributes); //restore old colors

Конечно, когда я запускаю свою программу из окна консоли, цвета меняются, как и ожидалось. Проблема в том, что когда он запускается из сценария msbuild, я использую exec:

<Exec Command="myExecutable.exe" />

При запуске из скрипта msbuild программа не влияет на цвета. Текст по-прежнему выводится при вызове std :: cout, но это просто обычные цвета окна консоли.


гипотеза

Я предполагаю, что вызов exec пишет в стандартный вывод с помощью другого дескриптора, чем STD_OUTPUT_HANDLE. Либо так, либо msbuild exec устанавливает свои собственные атрибуты консоли. Я пытался получить родительскую консоль, но мне не повезло.

Есть идеи?

1

Решение

Скорее всего, MSBuild соединяет ваш исполняемый файл с каналом. Когда вы записываете что-то в канал, MSBuild читает его с другого конца, тогда он может выполнять некоторую обработку: например, запись на экран, в журналы и т. Д. Проблема в том, что вы не можете передавать цвета через канал. На самом деле вы можете проверить, что ваш stdout дескриптор не консольный буфер, использующий GetFileType, который вернется FILE_TYPE_CHAR для консоли, но FILE_TYPE_PIPE если моя гипотеза верна. Вы также должны проверить, успешно ли выполнялись вызовы вашей консольной функции.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]