Форум: "Основная";
Текущий архив: 2004.04.25;
Скачать: [xml.tar.bz2];
ВнизКак "оживить" прогу во время выполнения другого приложения Найти похожие ветки
← →
Tornado © (2004-04-07 09:57) [0]Запускаю на выполнение другое приложение с определенными параметрами из своей проги с помощью CreateProcess:
function CreatePr(Path_AdmProg, Paramm: PChar): Boolean;
var
si: STARTUPINFO;
pi: PROCESS_INFORMATION;
begin
ZeroMemory(@si,sizeof(si));
si.cb:=SizeOf(si);
if not CreateProcess(Path_AdmProg, { module name. }
Paramm, { Command line. }
nil, { Process handle not inheritable. }
nil, { Thread handle not inheritable. }
False, { Set handle inheritance to FALSE. }
0, { No creation flags. }
nil, { Use parent"s environment block. }
nil, { Use parent"s starting directory. }
si, { Pointer to STARTUPINFO structure. }
pi ) { Pointer to PROCESS_INFORMATION structure. }
then
begin
MessageBox(Application.Handle,PChar("Не могу запустить процесс!."),PChar("Error"),MB_ICONSTOP);
Result := False;
Exit;
end;
WaitForSingleObject( pi.hProcess, INFINITE );
CloseHandle( pi.hProcess );
CloseHandle( pi.hThread );
Result := True;
end;
Во время работы запущенного приложения моя прога как бы подвисает, как только запущенное приложение заканчивает свою работу и закрывает окно моя прога снова "оживает". Вопрос как сделать так чтобы во время работы другого приложения можно было так же работать и с моей прогой? Пробовал вставить Application.ProcessMessages - не помогает...
← →
Vlad © (2004-04-07 10:06) [1]
> WaitForSingleObject( pi.hProcess, INFINITE );
Вот это не о чем не говорит ?
← →
Tornado © (2004-04-07 10:13) [2]>>> Vlad © (07.04.04 10:06) [1]
есть подозрение что тут надо изменить но как?
← →
Developerr © (2004-04-07 10:17) [3]А если ввобще убрать эту строку?
← →
Bel © (2004-04-07 10:17) [4]Убери вообще эту строчку.
← →
Vlad © (2004-04-07 10:19) [5]
> Tornado © (07.04.04 10:13) [2]
Можно просто убрать. Но только если ты уверен что твоя программа будет работать корректно, не дождавшись завершения процесса.
← →
Digitman © (2004-04-07 10:22) [6]
> Пробовал вставить
интересно, и куда "пробовал" ? тут и цикла-то нет ..
если тебе не требуется дожидаться , пока порожденный процесс завершит свою работу, просто убери Wait-ф-цию
если требуется ждать и одновременно реагировать на сообщения пользовательскому интерфейсу твоего приложения, используй MsgWaitForMultipleObjects()
← →
Vitaly © (2004-04-07 10:23) [7]
while WaitForSingleObject( pi.hProcess, 300 ) = WAIT_TIMEOUT do
application.processMessages;
← →
Tornado © (2004-04-07 10:32) [8]в том то и дело что после отработки внешнего приложения создается определенный файл который потом выводит моя прога в Memo...вообщем без этой строки не получается, будет ошибка потому что файла необходимого пока нет
← →
Tornado © (2004-04-07 10:41) [9]спасибо всем! получилось
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2004.04.25;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.035 c