[Back to DELPHI SWAG index] [Back to Main SWAG index] [Original]

    Hi

    > From:          Ahmad Rosadi Djarkasih <djar@arjuna.telkom.net.id> I
    > need to exec an app and wait until that particular app is terminated
    > ? How can I do it in 32 bit environment ? Since function
    > GetModuleUsage is obsolete in Win32 API.

    WinExec and WinExecAndWait follow:

    ---------------------------------------------------
     Following are two examples which I've used to launch other
    applications. They have both come in handy. Source edited from public
    newsgroup postings. 100% FreeWare. All I asked is: nothing!! It's
    free, do what you want with it.

     -Nick Webster
     nwebster@circle.net
     Some Guy On The Net
     Asheville, North Carolina. USA

    {------= Launch Another Program Method One =-----------------------}

     // Path and filename are hard coded

    procedure TForm1.Button2Click(Sender: TObject);
    Var
      Fn : String;
     TSI : TStartupInfo;
     TPI : TProcessInformation;
    begin
          Fn := 'C:\TEST.EXE';
          WndHandle := 0;
          FillChar(TSI, SizeOf(TSI), 0);
          TSI.CB := SizeOf(TSI);
           If CreateProcess (PChar(Fn), NIL, NIL, NIL, False,
           DETACHED_PROCESS, NIL,   NIL, TSI, TPI) Then
         Begin
          ShowMessage('Look I started another program!');
         End;
    end;
    {------= End Method One---------------------------------------------}

    {-----= Launch Another Program Method Two =-------------------------}

    // aCmdLine  Path and filename of file to launch            : String
    // aHide     Hide this program while the launched one runs  : Boolean
    // aWait     Wait for the launched program to finish        : Boolean

    Function TForm1.FileExec(const aCmdLine: String; aHide, aWait: Boolean):
    Boolean;
    var
      StartupInfo : TStartupInfo;
      ProcessInfo : TProcessInformation;
    begin
      {setup the startup information for the application }
      FillChar(StartupInfo, SizeOf(TStartupInfo), 0);
      with StartupInfo do
      Begin
        cb := SizeOf(TStartupInfo);
        dwFlags := STARTF_USESHOWWINDOW or STARTF_FORCEONFEEDBACK;
         If aHide Then wShowWindow := SW_HIDE
          else wShowWindow := SW_SHOWNORMAL;
      End;

      Result := CreateProcess(nil,PChar(aCmdLine), nil, nil, False,
                   NORMAL_PRIORITY_CLASS, nil, nil, StartupInfo, ProcessInfo);

      If aWait Then
       If Result Then
        Begin
         WaitForInputIdle(ProcessInfo.hProcess, INFINITE);
         WaitForSingleObject(ProcessInfo.hProcess, INFINITE);
        End;
    end;
    {-----= End Method Two =--------------------------------------------}

    --
    Daniel J. Wojcik
    Help prevent forest fires...chop down a tree today!
    --

[Back to DELPHI SWAG index] [Back to Main SWAG index] [Original]