Wie kann ich aus meiner Anwendung heraus ein anderes Programm starten und auf dessen Ende warten?
Dafür gibt es die Funktion CreateProcess. Infos zu WindowState stehen in der
Onlinehilfe.
Hier zuerst die Win32-Version:
uses WinTypes, WinProcs, SysUtils; function ExecAndWait(const Filename, Params: string; WindowState: word): boolean; var SUInfo: TStartupInfo; ProcInfo: TProcessInformation; CmdLine: string; begin CmdLine := '"' + Filename + '"' + Params; FillChar(SUInfo, SizeOf(SUInfo), #0); with SUInfo do begin cb := SizeOf(SUInfo); dwFlags := STARTF_USESHOWWINDOW; wShowWindow := WindowState; end; Result := CreateProcess(NIL, PChar(CmdLine), NIL, NIL, FALSE, CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS, NIL, PChar(ExtractFilePath(Filename)), SUInfo, ProcInfo); if Result then WaitForSingleObject(ProcInfo.hProcess, INFINITE);
Delphi 1 | Delphi 2 | Delphi 3 | Delphi 4 |
nicht getestet | Version nicht betroffen | getestet |
Hier die 16-bit Version:
uses WinTypes, WinProcs, SysUtils; function ExecAndWait(const Filename, Params: string; WindowState: word): boolean; var InstanceID : THandle; Buff: array[0..255] of char; begin StrPCopy(Buff, Filename + ' ' + Params); InstanceID := WinExec(Buff, WindowState); if InstanceID < 32 then begin Result := FALSE; end else begin Result := TRUE; repeat Application.ProcessMessages; sleep(100); until Application.Terminated or (GetModuleUsage(InstanceID) = 0); end;
Delphi 1 | Delphi 2 | Delphi 3 | Delphi 4 |
nicht getestet | Version nicht betroffen | getestet |
siehe auch:
Wie kann ich aus meiner Anwendung heraus ein anderes Programm starten?
Wie kann aus meinem Programm heraus eine andere Anwendung schließen?