他のプログラムの終了を待つには
                                                         玄関へお回り下さい。
Shell関数で起動したプログラムの終了を待つ     (074)
   次の2行を続けることで、DosのBATファイルのようにできます。
    ret1 = Shell("C:\WINDOWS\notepad.exe", 1)
    ShellEnd (ret1)
下記のコードでは、まずメモ帳を起動して、メモ帳が閉じられるまで待ちます。メモ帳が終了すると、電卓を起動し、終了するまで待ちます。待ち時間の間は他の処理を受け付けます。

Option Explicit   'SampleNo=074 WindowsXP VB6.0(SP5) 2002.05.16
'既存のプロセスオブジェクトのハンドルを取得(P665)
Private Declare Function OpenProcess Lib "kernel32" _
  (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, _
   ByVal dwProcessId As Long) As Long
'指定のプロセスの終了コードを取得(P660)
Private Declare Function GetExitCodeProcess Lib "kernel32" _
  (ByVal hProcess As Long, lpExitCode As Long) As Long
'開かれているオブジェクトのハンドルを解放する(P1252)
Private Declare Function CloseHandle Lib "kernel32" _
  (ByVal hObject As Long) As Long
Private Const PROCESS_QUERY_INFORMATION = &H400&
Private Const STILL_ACTIVE = &H103&


Private Sub ShellEnd(ProcessID As Long)
  Dim hProcess As Long
  Dim EndCode As Long
  Dim EndRet  As Long
  'ハンドルを取得する
   hProcess = OpenProcess(PROCESS_QUERY_INFORMATION, 1, ProcessID)
  '終わるまで待つ
  Do
    EndRet = GetExitCodeProcess(hProcess, EndCode)
    DoEvents
  Loop While (EndCode = STILL_ACTIVE)
  'ハンドルを閉じる
   EndRet = CloseHandle(hProcess)
End Sub


Private Sub Command1_Click()
'メモ帳を起動し、終了したら電卓を起動する
  Dim Ret1 As Long
  Dim Ret2 As Long
  Ret1 = Shell("C:\windows\system32\notepad.exe", 1)
  'Ret1 = Shell("C:\WINDOWS\notepad.exe", 1)
  ShellEnd (Ret1)    '終了するまで待機
  'MsgBox ("メモ帳が終了しました。")

  Ret2 = Shell("C:\windows\system32\CALC.EXE", 1)
  'Ret2 = Shell("C:\WINDOWS\CALC.EXE", 1)
  ShellEnd (Ret2)
  'MsgBox ("電卓が終了しました。")
End Sub




2002/05/16