DELPHI如何执行完一个程序再执行另一个程序??procedure TForm1.Button1Click(Sender: TObject);
begin
winexec('a.exe',sw_show);
winexec('b.exe',sw_show);
winexec('c.exe',sw_show);
winexec('d.exe',sw_show);
close;
end;现在是一起执行abcd四个.EXE程序,我的想法是执行完A.EXE再执行B.EXE然后是C.EXE最后是D.EXE,请问高手怎么改???

解决方案 »

  1.   

    http://www.tkbbs.com/Article/HTML/5943.html(ShellExecute启动外部程序并等待它结束)
      

  2.   

    好吧!我给你写代码了:你只需把这整个单元照抄去就可以试验了:unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;type
      TForm1 = class(TForm)
        Button1: TButton;
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementationuses ShellAPI;  //注意{$R *.dfm}function ExecAppWait(AppName, Params: string): Boolean;
    var
      ShellExInfo: TShellExecuteInfo;
    begin
      FillChar(ShellExInfo, SizeOf(ShellExInfo), 0);
      with ShellExInfo do begin
        cbSize := SizeOf(ShellExInfo);
        fMask := see_Mask_NoCloseProcess;
        Wnd := Application.Handle;
        lpFile := PChar(AppName);
        lpParameters := PChar(Params);
        nShow := sw_ShowNormal;
      end;
      Result := ShellExecuteEx(@ShellExInfo);
      if Result then
        while WaitForSingleObject(ShellExInfo.HProcess, 100) = WAIT_TIMEOUT do
        begin
          Application.ProcessMessages;
          if Application.Terminated then Break;
        end;
    end;procedure TForm1.Button1Click(Sender: TObject);
    const    { 连续运行下面这四个EXE文件 }
      EXEFILES : array[1..4] of string =
                 ('calc.exe', 'mspaint.exe', 'Notepad.exe', 'wordpad.exe');
    var
      Success: Boolean;
      InstanceID: THandle;
      I : integer;
    begin
      for I := Low(EXEFILES) to High(EXEFILES) do
        begin
        Application.Minimize;
        Success := False;
        try
           Success := ExecAppWait(EXEFILES[I], '')
        finally
          Application.Restore;
          if not Success then
            ShowMessage(Format('Application %d failed: %s', [ I, EXEFILES[I] ]));
        end;
      end;
    end;end.