Ha egy programot elindítunk a saját applikációnkból, az alábbi módon meg is várhatjuk annak befejezését. function ExecAndWait(const Filename, Params: string):boolean; {$IFDEF WIN32} var SUInfo: TStartupInfo; ProcInfo: TProcessInformation; CmdLine: string; begin { Enclose filename in quotes to take care of long filenames with spaces. } CmdLine := Filename+' '+Params; FillChar(SUInfo, SizeOf(SUInfo), #0); with SUInfo do begin cb := SizeOf(SUInfo); dwFlags := STARTF_USESHOWWINDOW; wShowWindow := word(0); end; Result := CreateProcess(NIL, PChar(CmdLine), NIL, NIL, FALSE, CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS, NIL, PChar(ExtractFilePath(Filename)), SUInfo, ProcInfo); { Wait for it to finish. } if Result then begin repeat application.ProcessMessages; until 0 = WaitForSingleObject(ProcInfo.hProcess, 10); { Clean up the handles. } CloseHandle(ProcInfo.hProcess); CloseHandle(ProcInfo.hThread); end; {$ELSE} var InstanceID : THandle; Buff: array[0..255] of char; begin StrPCopy(Buff, Filename + ' ' + Params); InstanceID := WinExec(Buff, WindowState); if InstanceID < 32 then { a value less than 32 indicates an Exec error } Result := FALSE else begin Result := TRUE; repeat Application.ProcessMessages; until Application.Terminated; end; {$ENDIF} END; Megjegyzés: Egy kicsit átjavítottam az eredeti példát, mert az mikor elindította az exe-t, akkor megfagyva várta a program befejeződését, a fenti példában már nem így van. ExecAndWait('d:\nevezo.exe','');