■取得したIEに対して操作を行う場合、IEが背面にいると操作結果が見られないため、取得したIEを予め最前面に表示させる。
この処理はよく利用する為、再利用できる様、別プロシージャに記述する。
Option Explicit '強制的に最前面にさせる Private Declare PtrSafe Function SetForegroundWindow Lib "user32" (ByVal hwnd As Long) As Long '最小化されているか調べる Private Declare PtrSafe Function IsIconic Lib "user32" (ByVal hwnd As Long) As Long '元の大きさに戻すAPI Private Declare PtrSafe Function ShowWindowAsync Lib "user32" (ByVal hwnd As Long, ByVal nCmdShow As Long) '指定されたWindowを最前面にさせる Sub showForeground(objIE As Object) '最小化されている場合は元の大きさに戻す '(9=RESTORE:最小化前の状態) If IsIconic(objIE.hwnd) Then ShowWindowAsync objIE.hwnd, &H9 End If 'IEを最前面に表示 SetForegroundWindow (objIE.hwnd) End Sub
■解説
SetForegroundWindow関数の引数にはウィンドウのハンドルを指定する。objIEを最前面に表示させたい場合、ハンドルを返すobjIE.hWndプロパティを指定する。
最小化されている場合はSetForeguroundWindow関数のみでは最前面化できず、先に当該ウィンドウを元の大きさに戻して表示させる。その際、Win32APIで、
最小化しているか判定を行えるIsIconic関数、ウィンドウを元の大きさに戻すShowWindowAsync関数を使用する。
■使用例
Sub SearchIE() Dim colSh As Object Dim win As Object Dim strTemp As String Dim objIE As Object Set colSh = CreateObject("Shell.Application") For Each win In colSh.Windows strTemp = "" On Error Resume Next strTemp = win.Document.Title On Error GoTo 0 If InStr(strTemp, "Google") > 0 Then Set objIE = win Exit For End If Next '取得したIEを最前面に表示する Call showForeground(objIE) End Sub