Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Как получить то, что другая программа выводит на консоль?

Аноним
Нужна GUI программа, которая запускает досовские проги, исходников от котрых нет. Как сделать так, чтобы все сообщения этих прог выводились в окне основной программы, а не на консоль?
4
21 августа 2002 года
mike
3.7K / / 01.10.2002
см. CreatePipe
Аноним
А попроще никак? Я чувствую там наворотить нужно будет больше чем вся остальная программа. А без примеров я с этим Пайпом не разберусь, а их там нет.
4
21 августа 2002 года
mike
3.7K / / 01.10.2002
>Q32: Есть 2 задачи: одна работает в окне ДОС, другая в Windows. Как
> организовать обмен между ними, может есть какие-то стандартные
> буферы обмена (Клипборд и Файлы не предлагать)?

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.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог