Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2005.09.25;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.034 c
4-1122223901
Regis__
2005-07-24 20:51
2005.09.25
Создать образ диска


2-1123906165
Ivanov
2005-08-13 08:09
2005.09.25
Использование DLL


14-1125685110
hgd
2005-09-02 22:18
2005.09.25
Можно заменить страницу на сайте


5-1100761074
Stanislav
2004-11-18 09:57
2005.09.25
Не создаеься потомок Tcollectionitem


6-1117516750
leonidus
2005-05-31 09:19
2005.09.25
Как в TWebBrowser`e сменить кодировку загруженного документа





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский