C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Запуск дочернего процесса, Но чтобы не появлялась форма
Schumi
Отправлено: 27.01.2004, 19:01


Машинист паровоза

Группа: Участник
Сообщений: 206



При работе программы нужно запустить другую программу, дождаться завершения,и продолжить выполнение основной проги. Но при этом,нужно,чтобы не поялялась форма её.
Знаю команду spawn — она ждёт завершения дочернего процесса, а
shellexecute — может не создавать окна.
Но чтобы одновременно ждать и не создавать окна,не нашёл.Подсобите.
Gedeon
Отправлено: 28.01.2004, 09:30


Ветеран

Группа: Модератор
Сообщений: 1742



А что мешает в другой проге не показывать окно? Ну а если нужно чтобы окно не запускалось именно из твоего приложения, можно использовать параметры командной строки при запуске. Альтернатива — после запуска ф-цией ShowWindow() спрятать окно — подробности MSDN
Roman
Отправлено: 28.01.2004, 11:06


Дежурный стрелочник

Группа: Участник
Сообщений: 78



Можно использовать CreateProcess и анализировать код возврата.

Примерный код:

STARTUPINFO StartInfo = { sizeof(TStartupInfo) };
PROCESS_INFORMATION ProcInfo;
LPCTSTR s;
StartInfo.cb = sizeof(StartInfo);
StartInfo.dwFlags = STARTF_USESHOWWINDOW;
StartInfo.wShowWindow = SW_HIDE; //форма не видима
SendMessage(FIndikProc->Handle, WM_INDIKPROC, 0, (int) 40);
try {
if (! CreateProcess(NULL, "file.exe", NULL, NULL, false, CREATE_NEW_CONSOLE |
HIGH_PRIORITY_CLASS, NULL, NULL, &StartInfo, &ProcInfo))
ShowMessage ("Ошибка — " + IntToStr(GetLastError()));
else {
if (WaitForSingleObject(ProcInfo.hProcess, 45000) == WAIT_TIMEOUT) {
ShowMessage("Ошибка — вышло время!");
TerminateProcess(ProcInfo.hProcess, 2);
}
CloseHandle(ProcInfo.hProcess);
}
} catch (...) {}

Вернуться в Вопросы программирования в C++Builder