外部プログラムを実行するには、Shell関数を使用しますが、
ここで問題になるのが、Shell関数は実行中の処理の終了を待たない
ということです。
そこで、以下のサンプルマクロでは、Shell関数を使用して
外部プログラムを実行し、そのプログラムが終了するまで待つように
処理を施してあります。
'--- Win32 API 関数の宣言 ---
Declare Function WaitForSingleObject Lib "kernel32" _(ByVal hHandle As Long, _
ByVal dwMilliseconds As Long) As Long
Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, _
ByVal bInheritHandle As Long, _
ByVal dwProcessId As Long) As Long
Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
'--- Win32 API 定数の宣言 ---
Global Const PROCESS_ALL_ACCESS As Long = &H1F0FFF
Global Const INFINITE As Long = &HFFFF
Sub WaitRun()
Dim TaskId As Long 'タスクID
Dim hProc As Variant 'プロセスハンドル
' 外部プログラムの実行
TaskId = Shell("c:\Test.bat", 2)
' プロセスハンドルの取得
hProc = OpenProcess(PROCESS_ALL_ACCESS, False, TaskId)
' プロセスのオープン
If OpenProcess(PROCESS_ALL_ACCESS, False, TaskId) <> vbNull Then
' プロセスのシグナル待ち
Call WaitForSingleObject(hProc, INFINITE)
' プロセスクローズ
CloseHandle hProc
End If
End Sub
|