![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как запустить файл, а потом дождаться его завершения
Lamer86 © (2002-08-27 11:59:00)Мне необходимо во время выполнения кода запусть exe. А после заверешния его работы, продолжить выполнение кода. Как это сделать? (у программы нет окна, так что FindWindow не подойдет)
MsGuns (2002-08-27 14:35:00) [1]Забыл добавить секцию
var
si: TStartUpInfo;
pi: TProcessInformation;
ComLine: string;
MsGuns (2002-08-27 14:33:00) [2]То же, что и у Tornado, только осн.прога во время ожидания завершения проигрывания mp3, не висит тупо, а продолжает нормально реагировать на мышу и клаву, т.е. просто работает как обычно
procedure TfrmMain.btStartClick(Sender: TObject);
begin
ComLine := "Exec1 "+frmMain.opdlMuz.FileName;
FillChar(si,SizeOf(si),0);
si.cb := SizeOf(si);
First := true;
if CreateProcess(nil,PChar(ComLine),nil,nil,false,
CREATE_DEFAULT_ERROR_MODE,nil,nil,si,pi) then
begin
frmMain.btStart.Enabled := false;
frmMain.btStop.Enabled := true;
While WaitForSingleObject(pi.hProcess,0)=Wait_TimeOut do
Application.ProcessMessages;
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
frmMain.btStart.Enabled := true;
frmMain.btStop.Enabled := false;
end
else
end;
Tornado (2002-08-27 13:01:00) [3]Пример архивации файла, прога ждет пока процесс не закончится, потом продолжает работу. Удачи
var
si:STARTUPINFO;
pi:PROCESS_INFORMATION;
cmdline, a1, p1:string;
ZeroMemory(@si,sizeof(si));
si.cb:=SizeOf(si);
a1 := ExtractFilePath(Application.ExeName) + "Data\Izm_12.mdb";
p1 := ExtractFilePath(Application.ExeName) + "Backup\archiv";
cmdline:=ExtractFilePath(Application.ExeName) + "arj.exe" + " " + "a" + " " + "-e" + " " + p1 + " " + a1;
if not CreateProcess( nil,
PChar(cmdline),
nil,
nil,
False,
0,
nil,
nil,
si,
pi )
then
begin
Application.MessageBox(Не могу выполнить архивацию!","Ошибка", MB_OK+MB_ICONERROR);
Exit;
end;
WaitForSingleObject( pi.hProcess, INFINITE ); {ждет окнчания процесса архивации, пока не будет закрыто окно DOS}
CloseHandle( pi.hProcess );
CloseHandle( pi.hThread );
Внук (2002-08-27 12:05:00) [4]CreateProcess(...)
CloseHandle(ThreadHandle);
WaitForSingleObject(ProcessHandle);
CloseHandle(ProcessHandle);
Слесарь Матерящийся (2002-08-27 12:04:00) [5]WaitForSingleObject(YourNewProcessHandle,INFINITE)
Skier (2002-08-27 12:01:00) [6]>Lamer86
FAQ + CreateProcess