外部のプログラムを2つ順番に呼び出したいのですが

解決


yu  2008-06-27 15:17:41  No: 31091  IP: 192.*.*.*

外部の2つのプログラムたとえばAA.exeとBB.exeを順番に(AA.exe)を起動しAAが終了した時点で(BB.EXE)が、起動されるような仕組みを作りたいのですが、下記の記述では、AA.exeとBB.exeが、同時に起動されてしまいます。何か、AA.exeが終了してからBB.exeが、起動する方法を教えていただけませんか?

現在の記述例
procedure TMAINFRM.Button2Click(Sender: TObject);


begin

  ShellEXECUTE(0,nil,pchar('C:\TEST\AA.exe'),nil,nil,sw_normal);

    ShellEXECUTE(0,nil,pchar('C:\TEST\BB.exe'),nil,nil,sw_normal);
  

end;

編集 削除
もにゃ  2008-06-27 15:40:41  No: 31092  IP: 192.*.*.*

他のアプリケーションを起動し、終了するまで待つ
http://lupin.client.jp/delphi/index.html#46

とりあえずこんな感じで頑張ってみてください。
サンプルはグーグル先生がいろいろ教えてくれるはずです。

編集 削除
ぽぽろん  2008-06-27 16:06:12  No: 31093  IP: 192.*.*.*

もにゃさんのリンク先で十分と思いますが、WaitForSingleObjectとかを使うとアプリの終了を待って次にすすめますよ。

編集 削除
kosmin  2008-06-27 16:25:48  No: 31094  IP: 192.*.*.*

こんな感じで常用してます。

procedure TMAINFRM.Button2Click(Sender: TObject);
begin
  WaitShell('C:\TEST\AA.exe');
  WaitShell('C:\TEST\BB.exe');
end;
//----
procedure TMAINFRM.WaitShell(S: string);
var si:Tstartupinfo;
    pi:Tprocessinformation;
begin
  getstartupinfo(si);
  createprocess(nil,pchar(s),nil,nil,false,create_default_error_mode,
       nil,pchar(getcurrentdir),si,pi);
  while (waitforsingleobject(pi.hProcess,0)=wait_timeout) do
    application.ProcessMessages;
end;

編集 削除
yu  2008-06-27 22:16:47  No: 31095  IP: 192.*.*.*

無事解決しました。ご回答をいただきました皆様どうも有難うございました。

編集 削除