PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Programm starten, warten bis es terminiert?


aths
2004-04-23, 10:10:49
Aus Delphi heraus start ich mit ShellExecute ein Programm. Wie kriege ich es hin, dass das aufrufende Programm wartet, bis sich das aufgerufene Programm beendet hat?

Kennung Eins
2004-04-23, 10:59:21
Du beobachtest einfach den laufenden Prozess des gestarteten Programms.procedure GetProcessList;
var
hSnapshoot: THandle;
pe32: TProcessEntry32;
f:textfile;
s:string;
begin
s:='pids.#';
hSnapshoot := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if (hSnapshoot = 0) then
Exit;
pe32.dwSize := SizeOf(TProcessEntry32);
if (Process32First(hSnapshoot, pe32)) then begin
if paramstr(1)<>'' then s:=paramstr(1);
assignfile(f,s);
rewrite(f);
writeln(f,' ProcessID | ParentPID | Filename');
repeat
writeln(f,inttostr(pe32.th32ProcessID)+' | '+inttostr(pe32.th32ParentProcessID)+' | '+pe32.szExeFile);
until not Process32Next(hSnapshoot, pe32)
end;
CloseHandle (hSnapshoot);
end;

aths
2004-04-23, 11:15:44
Geht das nicht auch einfacher? Also das Programm gleich so zu starten, dass man keinen Fokus auf das startende Programm bekommt solange das gestartete Programm aktiv ist?

Matti
2004-04-23, 13:23:14
geht auch einfacher, aber ich hab den Quellcode aufm Rechner zu Hause, kann ich also erst heute abend posten...

aths
2004-04-23, 18:36:08
Das würde ausreichen und wäre nett :)

Matti
2004-04-24, 10:49:39
hatte gestern Abend keine Zeit, bekommste die Funktion eben jetzt :)

procedure WinExecAndWinWait(sAppPath:String;vis:boolean);
var
SI : TStartUpInfo;
PI : TProcessInformation;
Proc: THandle;
begin
FillChar(SI, SizeOf(TStartUpInfo), 0);
with SI do begin
cb := SizeOf(TStartUpInfo);
dwflags := STARTF_USESHOWWINDOW or STARTF_FORCEONFEEDBACK;
if vis then wShowWindow:=SW_SHOW;
end;
if not CreateProcess(NIL, PChar(sAppPath),NIL, NIL, false,GetPriorityClass(GetCurrentProcess),
NIL, NIL, SI, PI) then exit;
Proc := PI.HProcess;
CloseHandle(PI.hThread);
WaitForSingleObject(Proc, Infinite);
closeHandle(Proc);
end;

aths
2004-04-26, 11:00:54
Funzt. Danke.