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?


Delphi FAQ