Как получить то, что другая программа выводит на консоль?
Нужна GUI программа, которая запускает досовские проги, исходников от котрых нет. Как сделать так, чтобы все сообщения этих прог выводились в окне основной программы, а не на консоль?
см. CreatePipe
А попроще никак? Я чувствую там наворотить нужно будет больше чем вся остальная программа. А без примеров я с этим Пайпом не разберусь, а их там нет.
> организовать обмен между ними, может есть какие-то стандартные
> буферы обмена (Клипборд и Файлы не предлагать)?
A(IEr): Попробуй через "трубу" (pipe). Принцип такой - запускаешь досовскую
программу через CreateProcess, в STARTUPINFO:
si.dwFlags = STARTF_USESTDHANDLES;
si.hStdError = GetStdHandler(STD_ERROR_HANDLE);
потом
CreatePipe(&hIn, &si.hStdOutput, 0, 0);
CreatePipe(&si.hStdInput, &hOut, 0, 0);
дальше все просто:
for (;;) {
DWORD code;
if (!GetExitCodeThread(pi.hThread, &code)) // pi это структура
return -1; // PROCESS_INFORMATION
if (code == STILL_ACTIVE) { // переданная в CreateProcess
// Читаем с помощью hIn
// Пишем с помощью hOut
}
else
break;
}
CloseHandle(si.hStdInput);
CloseHandle(hOut);
CloseHandle(si.hStdOutput);
CloseHandle(hIn);
Досовская программа читает из stdin, пишет в stdout.