Archiv verlassen und diese Seite im Standarddesign anzeigen : Programm starten, warten bis es terminiert?
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;
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...
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;
vBulletin®, Copyright ©2000-2025, Jelsoft Enterprises Ltd.