Перепутан вывод в CMD.EXE с вручную выделенной консолью - PullRequest
0 голосов
/ 11 мая 2018

Я расстраиваюсь.У меня есть приложение Windows GUI, которое вручную открывает консоль.Вызов AllocConsole и перенаправление stdin, stdout и stderr работают безупречно.Я могу напечатать любой ввод и любой вывод, и это работает хорошо.Проблема в том, что когда я вызываю _wsystem для запуска команды CMD, вывод - это мусор.Персонажи перемешаны.CMD не полностью интегрируется с консолью.

Я перенаправляю вывод на консоль следующим образом:

consoleHandleOut = GetStdHandle(STD_OUTPUT_HANDLE); 
if (consoleHandleOut != INVALID_HANDLE_VALUE) { 
    //freopen("CONOUT$", "w", stdout); 
    freopen_s(&newStream, "CONOUT$", "w", stdout); 
    setvbuf(stdout, NULL, _IONBF, 0); 
    SetStdHandle(STD_OUTPUT_HANDLE, 
                 (HANDLE)_get_osfhandle(_fileno(newStream))); 
} else { 
    return FALSE; 
} 

Я делаю это для каждой ручки.

1 Ответ

0 голосов
/ 12 мая 2018

Измените режим открытия с "w" на "r +".Для полной совместимости с консольным API файлы консоли следует открывать с правами чтения и записи, которые открываются по умолчанию, когда процесс выделяет консоль.Например, среда выполнения C обнаруживает дескриптор консоли для isatty, вызывая GetConsoleMode, для чего требуется дескриптор с доступом для чтения.Это не удастся, если открыть «CONOUT $» только с правами на запись.

...