#292 | 実行可能ファイルを起動して終了まで待機する | VBA、API | |
Accessから他の実行可能ファイル(.EXE)を実行し、それが閉じられるまで待機する方法です。 WindowsAPIを使って実行可能ファイルを起動し、ループによってそれが終了したかどうかを監視します。 次の例では、「ExecuteWaitProccess」というオリジナルのFunctionプロシージャを作っています。以下のコードをすべて標準モジュールに記述し、ExecuteWaitProccessを呼び出すことで実行可能ファイルを起動することができます。その実行可能ファイルが終了した時点でExecuteWaitProccessプロシージャが完了して呼び出し元コードにカレントステートメントが返ってきますので、呼び出し側はたった1行記述するだけです。 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 Function ExecuteWaitProccess(strExeFileName As String) As Boolean '概要 指定の実行可能ファイルを起動して終了まで待機する '引数 strExeFileName : 実行ファイルのパス+コマンドライン引数 '返値 プロセス成功時 : True プロセス失敗時 : False Dim lngProcId As Long Dim lngProcHandle As Long Dim lngProcExitCode As Long '実行可能ファイルを起動 lngProcId = Shell(strExeFileName, vbNormalFocus) 'プロセスオブジェクトのハンドルを取得 lngProcHandle = OpenProcess(PROCESS_QUERY_INFORMATION, False, lngProcId) If lngProcHandle <> 0 Then '新しいプロセスを作成できた場合 'プロセスが終了するまでのループ Do 'プロセスの終了状態を取得 GetExitCodeProcess lngProcHandle, lngProcExitCode DoEvents Loop While lngProcExitCode = STILL_ACTIVE ExecuteWaitProccess = True Else ExecuteWaitProccess = False End If 'プロセスオブジェクトのハンドルをクローズ CloseHandle lngProcHandle End Function 使用例: Sub test()
'メモ帳を起動して終了まで待機します ExecuteWaitProccess "notepad.exe" MsgBox "メモ帳が終了しました。" End Sub |
|||
|
Copyright © T'sWare All rights reserved |