他のプログラムを起動して終了するまで待つ
スポンサーリンク
VB6 では、Win32API の WaitForSingleObject 関数を使用します。標準モジュールなどで、以下の Win32API 関数と自作の WaitForExitProcess 関数を定義しておいてください。
サンプルコード
以下にサンプルコードを示します。
VB6.0 以前
Option Explicit ' OpenProcess 関数 Private Declare Function OpenProcess Lib "KERNEL32.DLL" ( _ ByVal dwDesiredAccess As Long, _ ByVal bInheritHandle As Long, _ ByVal dwProcessId As Long _ ) As Long ' CloseHandle 関数 Private Declare Function CloseHandle Lib "KERNEL32.DLL" ( _ ByVal hObject As Long _ ) As Long ' WaitForSingleObject 関数 Private Declare Function WaitForSingleObject Lib "KERNEL32.DLL" ( _ ByVal hHandle As Long, _ ByVal dwMilliseconds As Long _ ) As Long ' 定数の定義 Private Const SYNCHRONIZE As Long = &H100000 Private Const INFINITE As Long = &HFFFF ' ------------------------------------------------------------------------------- ' プロセスが終了するまで指定したミリ秒数待機します。 ' ' @Param lProcessId 終了するまで待機するプロセスの ID。 ' @Param [lMilliseconds] 終了するまで待機する時間。(省略時は無限) ' ------------------------------------------------------------------------------- Public Sub WaitForExitProcess(ByVal lProcessId As Long, Optional ByVal lMilliseconds As Long = INFINITE) Dim hProcessHandle As Long ' Process を開いてハンドルを取得する hProcessHandle = OpenProcess(SYNCHRONIZE, 0&, lProcessId) If hProcessHandle <> 0 Then ' 終了するまで、指定したミリ秒数待機する Call WaitForSingleObject(hProcessHandle, lMilliseconds) ' Process のハンドルを閉じる Call CloseHandle(hProcessHandle) End If End Sub
使用例は以下のようになります。
VB6.0 以前
' プロセス ID を格納するための変数を宣言する Dim lProcessId As Long ' メモ帳を起動してプロセス ID を取得する lProcessId = CLng(Shell("Notepad", vbNormalFocus)) ' 終了するまで待機する Call WaitForExitProcess(lProcessId) ' 終了した旨を表示する Call MsgBox("メモ帳が終了しました")
関連するリファレンス
準備中です。