他のプログラムを起動してアイドル状態になるまで待つ
スポンサーリンク
VB6 では、Win32API の WaitForInputIdle 関数を使用します。標準モジュールなどで、以下の Win32API 関数と自作の WaitForInputIdleProcess 関数を定義しておいてください。
サンプルコード
以下にサンプルコードを示します。
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 ' WaitForInputIdle 関数 Private Declare Function WaitForInputIdle Lib "USER32.DLL" ( _ ByVal hProcess 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 WaitForInputIdleProcess(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 WaitForInputIdle(hProcessHandle, lMilliseconds) ' Process のハンドルを閉じる Call CloseHandle(hProcessHandle) End If End Sub
使用例は以下のようになります。
VB6.0 以前
' プロセス ID を格納するための変数を宣言する Dim lProcessId As Long ' わざと重いファイルを Notepad で開く lProcessId = CLng(Shell("Notepad C:\Hoge.bmp", vbNormalFocus)) ' アイドル状態になるまで待機する Call WaitForInputIdleProcess(lProcessId) ' アイドル状態になった旨を表示する Call MsgBox("メモ帳がアイドル状態になりました")
関連するリファレンス
準備中です。