[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]