項目

実行しているプログラムの終了まで待機する

概要

「Shell」にて実行したプログラムの終了まで待機したい場合には「OpenProcess」を利用します。
  【処理の流れ】
  1.「Shell」にて実行します。戻り値に「プロセスID」が帰ってきます。
  2.「OpenProcess」で「プロセスID」から「プロセスハンドル」を取得します。
  3.取得した「プロセスハンドル」を元に「GetExitCodeProcess」でそのプログラムが実行されているか判定します。
  4. &H103&の場合には待機します。それ以外の場合に終了します。

Option Compare Database
Option Explicit

'-------------------------------------------
' API宣言
'-------------------------------------------
Private Declare Function OpenProcess Lib "kernel32" _
    (ByVal dwDesiredAccess As Long, _
     ByVal bInheritHandle As Long, _
     ByVal dwProcessId As Long) As Long

Private Declare Function CloseHandle Lib "kernel32" _
    (ByVal hObject As Long) As Long

Private Declare Function GetExitCodeProcess Lib "kernel32" _
    (ByVal hProcess As Long, lpExitCode As Long) As Long

Private Const PROCESS_QUERY_INFORMATION = &H400&
Private Const STILL_ACTIVE = &H103&

'-------------------------------------------
' 実行しているプログラムの終了まで待機する
'-------------------------------------------
Public Sub Hoge()
    
    Dim processID As Long
    Dim hProcess  As Long
    Dim rt        As Long
    Dim exitCode  As Long

    processID = Shell("実行するファイルのフルパス", vbHide)
    hProcess = OpenProcess(PROCESS_QUERY_INFORMATION, 1, processID)
    
    Do
        rt = GetExitCodeProcess(hProcess, exitCode)
        DoEvents
    Loop While (exitCode = STILL_ACTIVE)
    
    rt = CloseHandle(hProcess)
    
End Sub