Вниз
Скачать: CL | DM;

Как "оживить" прогу во время выполнения другого приложения   Найти похожие ветки 

← →
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 вся ветка

Скачать: CL | DM;



Память: 0.47 MB
Время: 0.021 c
1-1081463936
Broot
2004-04-09 02:38
2004.04.25
Проблема с шрифтами на разных компьютерах


1-1081164433
Stas
2004-04-05 15:27
2004.04.25
Помещение иконки в трей


14-1081092670
RealRascal
2004-04-04 19:31
2004.04.25
Как не вызывая ошибки узнать, что экземпляр класса создан


1-1081630509
Klopan
2004-04-11 00:55
2004.04.25
Функция определяющая количество строк в файле.


1-1081662810
Sphinx
2004-04-11 09:53
2004.04.25
Событие восстановления окна




   Наверх