項目
実行しているプログラムの終了まで待機する
概要
「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