![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
![]() Добрый день.
Можно ли сделать так: 1. Запустить процесс. (Например архивирование файла). 2. Ждать его завершения. (Но пока процесс не завершился, выводить что нибудь на экран) 3. Перейти далее... (например к отправке файла по почте). Это я сам сделаю... ![]() Если делать так: Код:
uses Windows; var SI: _STARTUPINFOA; PI: _PROCESS_INFORMATION; RarParam : String; begin RarParam := 'rar.exe a -ep ' + dPath + 'tmp\'+ FileName + '.rar ' + dPath + FileName; FillChar(SI, sizeof(SI), #0); SI.cb:=sizeof(SI); FillChar(PI, sizeof(PI), #0); CreateProcess(nil,PAnsiChar(RarParam),nil,nil,false,0,nil,nil,SI,PI); WaitForInputIdle(PI.hProcess, INFINITE); WaitForSingleObject(PI.hProcess,INFINITE); ShowMessage('Finish'); end; То, естественно, сообщение Finish появиться когда rar закроется. Как можно периодически опрашивать состояние процесса? |
#2
|
|||
|
|||
![]() Читаем описание функции:
Код:
DWORD WINAPI WaitForSingleObject( __in HANDLE hHandle, __in DWORD dwMilliseconds ); Второй параметр - время ожидания. Соответсвенно, ставишь какое-то разумное значение и цикл его. Получится что-то типа: Код:
While WaitForSingleObject(PI.hProcess,10) <> WAIT_OBJECT_0 Do begin // Здесь выводишь что-то свое. end; Функцию WaitForInputIdle не смотрел, но скорее всего: 1. работает точно также 2. Она вообще по логике не нужно, т.к. достаточно реализовывать ожидание по хэндлу процесса. Да, внутри цикла не выводи ничего, что может тормознуть очередь сообщений, типа ShowMessge и т.п. |
#3
|
|||
|
|||
![]() Большое спасибо.
![]() ![]() Вопрос закрыт. |
#4
|
|||
|
|||
![]() надо по щелчку по кнопке зпустить *.ехе файл, который лежит в папке с самой программой
|
#5
|
|||
|
|||
![]() 2AtoM22,
используй WinExec(),например, калькулятор можно вызвать так: WinExec(PChar('calc.exe',SW_ShowNormal); Поскольку функция при отсутствии полного пути ищет файл в том числе и в папке с проектом, то указывать полный путь не надо. |