Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.09.25;
Скачать: CL | DM;

Вниз

Как дождаться окончание работы вызываемого приложения ?   Найти похожие ветки 

 
Som   (2005-09-02 15:17) [0]

Необходимо запустить приложение, дождаться его выполнения и после выполнить определённые действия. Вопрос именно в том, как дождаться оканчание работы приложения?


 
wal ©   (2005-09-02 15:19) [1]


> Вопрос именно в том, как дождаться оканчание работы приложения?
Для начала, вопрос в том, как запускаешь?

С уважением.


 
begin...end ©   (2005-09-02 15:19) [2]

CreateProcess + WaitForSingleObject


 
Som   (2005-09-02 15:23) [3]

запускал WinExec-ом, но он же не ждёт окончания работы приложения


 
wal ©   (2005-09-02 15:32) [4]


> запускал WinExec-ом,
Хелп по ней читал? Там написано:
This function is provided for compatibility with earlier versions of Windows. For Win32-based applications, use the CreateProcess function.


 
Gydvin ©   (2005-09-02 15:39) [5]

От Озерова

Определение окончания работы другого приложения
WinExec сразу после запуска приложения возвращает его дескриптор. Для определения завершения программы вы должны вызывать функцию GetModuleUsage(InstanceID), где InstanceID - дескриптор запущенного функцией WinExec приложения. Если возвращаемый результат содержит ноль, приложение завершило свою работу. Сделайте проверку в таймерном цикле и задача решена.


 
Gydvin ©   (2005-09-02 15:41) [6]

От него же

Как мне запустить какую-нибудь программу? А как подождать, пока эта программа не отработает? Как выяснить, работает ли программа или уже завершилась? Как принудительно закрыть выполняющуюся программу?

Nomadic рекомендует следующее:
A: WinExec() или ShellExecute. У второй больше возможностей.

(SO): CreateProcess() в параметре process info возвращает handle запущенного процесса. Вот и делаешь WaitForSingleObject(pi.hProcess, INFINITE);

(AA): (Win16) Delay можно взять из rxLib.

--------------------------------------------------------------------------------
   handle := WinExec(...);
if handle >= 32 then
while GetModuleUsage(handle) > 0 do
Delay( nn );
else

raise ....  

(AM): Чтобы выяснить, работает ли программа, используйте GetProcessTimes(), параметр lpExitTime.

(Win32) Для принудительного завершения процесса -- TerminateProcess.

(Win16) (RR): Надо послать программе сообщение WM_QUIT:

--------------------------------------------------------------------------------
   Handle := Winexec(App, 0);
PostMessage(Handle, WM_QUIT, 0, 0);


 
Хинт ©   (2005-09-02 15:44) [7]

var
 si:STARTUPINFO;
 pi:PROCESS_INFORMATION;
...
begin
ZeroMemory(@si,sizeof(si));
si.cb:=SizeOf(si);
cmdline:="C:\my.exe";
if not CreateProcess( nil, PChar(cmdline), nil, nil, False, 0, nil, nil, si, pi) then ...
WaitForSingleObject( pi.hProcess, INFINITE );
CloseHandle( pi.hProcess );
CloseHandle( pi.hThread );
...
end;


 
Fay ©   (2005-09-02 16:02) [8]

2 Хинт ©   (02.09.05 15:44) [7]
>CloseHandle( pi.hProcess );
> CloseHandle( pi.hThread );


Думаю, стоит поменять порядок 8)


 
begin...end ©   (2005-09-02 16:06) [9]

> Fay ©   (02.09.05 16:02) [8]

Зачем?


 
Som   (2005-09-02 17:27) [10]

спасибо всем, всё получилось


 
Eraser ©   (2005-09-02 17:59) [11]

Gydvin ©   (02.09.05 15:39) [5]

под win32 лучше так не делать.



Страницы: 1 вся ветка

Текущий архив: 2005.09.25;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.035 c
14-1125319285
data
2005-08-29 16:41
2005.09.25
Вопрос к "кошатникам" и "собачникам"


14-1125338455
Piter
2005-08-29 22:00
2005.09.25
Разблокировка клавиатуры на Панасониках


14-1125154722
psa247
2005-08-27 18:58
2005.09.25
Дыра в ядре 2000


14-1125467609
CHES
2005-08-31 09:53
2005.09.25
Поклонники Opera. Всем срочно на их сайт


2-1124022167
bogdan
2005-08-14 16:22
2005.09.25
копирование каталогов с содержимым