これも定番。DoEvents がちょっとした隠し味。嘘だと思うなら削除してみれば? でもこれって、ループしまくるんでCPUの使用率が100%になってしまう。なんとかならんものないかな。
Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Private Declare Function GetExitCodeProcess Lib "kernel32" (ByVal hProcess As Long, lpExitCode As Long) As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Private Const SYNCHRONIZE = &H100000 Private Const INFINITE = &HFFFF Private Const PROCESS_QUERY_INFORMATION = &H400& Private Const STILL_ACTIVE = &H103& '------------------------------------------------------------------- ' 関数名 : WaitBatFileEnd ' 機 能 : Shell関数で起動をしたプログラムの同期処理を行う ' 引 数 : (in) ProcessID … プロセスID ' 返り値 : なし '------------------------------------------------------------------- Public Sub WaitBatFileEnd(ByVal ProcessID As Long) Dim ProcesshWnd As Long Dim ExitCode As Long 'プロセスハンドルを得る ProcesshWnd = OpenProcess(PROCESS_QUERY_INFORMATION, 1, ProcessID) Do Call GetExitCodeProcess(ProcesshWnd, ExitCode) DoEvents Loop While (ExitCode = STILL_ACTIVE) 'プロセスハンドルを解放する Call CloseHandle(ProcesshWnd) End Sub |