IEウィンドウを最前面に表示設定
<< エクセルVBAでIEウィンドウの表示倍率を設定する :前の記事
前回は、IEウィンドウの表示倍率(拡大・縮小)を設定する方法について解説しました。今回はIE(InternetExplorer)ウィンドウを最前面に表示させる方法について説明します。こちらの処理はBASIC認証を自動化させたい場合や、確実にSendKeysステートメントを利用できるようIEウィンドウを最前面に設定しておくと非常に便利です。
目次
- IE(InternetExplorer)ウィンドウを最前面に表示設定する処理の流れ
- 利用するサブルーチン・Windows API関数・プロパティについて
- IE(InternetExplorer)ウィンドウを最前面に表示させるサンプルコード
- IE(InternetExplorer)ウィンドウを最前面に表示させるサブルーチン「ieForeground」の解説
- 「ieForeground」を利用してIE(InternetExplorer)ウィンドウを最前面に表示するサンプルコード
- まとめ
IE(InternetExplorer)ウィンドウを最前面に表示設定する処理の流れ
以下が今回の処理の流れになります。
- ①Windows APIの宣言
- ②変数宣言
- ③ieViewサブルーチンを利用して指定したURLをIEで起動
- ③IEウィンドウの表示状態(最小化)をチェック
- ④最小化の場合は、表示サイズを元の大きさに戻す
- ⑤IEウィンドウを最前面に表示
利用するサブルーチン・Windows API関数・プロパティについて
今回利用するサブルーチン・Windows API関数・プロパティは以下になります。
- ieViewサブルーチン
- ieCheckサブルーチン
- Windows API
- Windows APIのIsIconic関数
- Windows APIのShowWindowAsync関数
- Windows APIのSetForegroundWindow関数
- Hwndプロパティ
ieViewサブルーチンとは
ieViewサブルーチンは指定したURLをInternetExplorerで起動させ、Webページが完全に読み込まれるまで待機処理をするマクロです。
ieCheckサブルーチンとは
ieCheckサブルーチンは指定したInternetExplorerオブジェクトのWebページが完全に読み込まれるまで待機処理をするマクロです。
Windows APIとは
API(Application Programming Interface)は、アプリケーションからOSやプログラム言語を操作するためのライブラリです。このAPIを利用することでファイル制御やウインドウ制御などを行うことが出来ます。また、Windows APIはMicrosoft WindowsのAPIのことで、Windowsのバージョン毎に拡張されており16ビットは「Win16 API」32ビットは「Win32 API」と呼ばれます。
Windows APIのIsIconic関数とは
Windows APIのIsIconic関数は指定されたウィンドウが最小化(アイコン化)されているかチェックするAPI関数です。
IsIconic("ウィンドウのハンドル")
Windows APIのShowWindowAsync関数とは
Windows APIのShowWindowAsync関数は指定されたウインドウの表示状態を設定するAPI関数です。
ShowWindowAsync("ウィンドウのハンドル", "ウィンドウの表示方法")
Windows APIのSetForegroundWindow関数とは
Windows APIのSetForegroundWindow関数は指定されたウィンドウをフォアグラウンドウィンドウ(デスクトップ上に表示されているウィンドウの中で最前面に表示されかつユーザの入力を受け付けられる状態)にするAPI関数です。
SetForegroundWindow("ウィンドウのハンドル")
Hwndプロパティとは
InternetExplorerオブジェクトのHwndプロパティはIEウィンドウのハンドルを示す長整数型(Long)の値を返します。
SetForegroundWindow("ウィンドウのハンドル")
IE(InternetExplorer)ウィンドウを最前面に表示させるサンプルコード
今回のVBAコードはIE(InternetExplorer)ウィンドウを最前面に表示させるマクロになります。
Declare Function IsIconic Lib "user32.dll" (ByVal hWnd As Long) As Long
Declare Function SetForegroundWindow Lib "user32.dll" (ByVal hWnd As Long) As Long
Declare Function ShowWindowAsync Lib "user32.dll" ( _
ByVal hWnd As Long, _
ByVal nCmdShow As Long _
) As Long
Const SW_RESTORE As Long = 9
Sub sample()
Dim objIE As InternetExplorer
'本サイトをIE(InternetExplorer)で起動
Call ieView(objIE, "http://www.vba-ie.net")
'ウィンドウが最小化されているかのチェック
If IsIconic(objIE.hWnd) Then
ShowWindowAsync objIE.hWnd, SW_RESTORE
End If
'IEを最前面に表示
SetForegroundWindow (objIE.hWnd)
End Sub
実行結果
IE(InternetExplorer)ウィンドウが最前面に表示されます。
解説
Declare Function IsIconic Lib "user32.dll" (ByVal hWnd As Long) As Long
まず、最前面表示に必要なWindows APIを使用できるようにAPIの宣言をします。宣言する場合は、宣言セクション内に記述します。こちらはWindows APIのIsIconic関数の宣言です。IsIconic関数は、ウィンドウが最小化されているかをチェックするために利用されます。
Declare Function SetForegroundWindow Lib "user32.dll" (ByVal hWnd As Long) As Long
こちらはWindows APIのSetForegroundWindow関数の宣言です。SetForegroundWindow関数は指定されたウィンドウを最前面に表示するAPI関数です。
Declare Function ShowWindowAsync Lib "user32.dll" ( _
ByVal hWnd As Long, _
ByVal nCmdShow As Long _
) As Long
Const SW_RESTORE As Long = 9
こちらはAWindows APIのShowWindowAsync関数の宣言です。指定されたウインドウの表示状態を設定します。定数を宣言するConstステートメントを利用して定数SW_RESTOREに「9」を設定しています。こちらの値はShowWindowAsync関数の引数に利用され、定数SW_RESTOREは、ウィンドウを元のサイズに戻す値になります。
Sub sample()
Dim objIE As InternetExplorer
こちらはSubステートメントに引数の設定がないsampleプロシージャになります。まずは、変数宣言でメモリ領域を割り当てるDimステートメントを利用してオブジェクト変数objIEにInternetExplorer型を変数宣言しています。
これによりInternetExplorerオブジェクトを作成した際にプロパティやメソッドを利用できるようになりました。
'本サイトをIE(InternetExplorer)で起動
Call ieView(objIE, "http://www.vba-ie.net/")
次に他のプロシージャを呼び出すCallステートメントを利用してieViewサブルーチンを呼び出しています。それぞれの第一引数にはオブジェクト変数の「objIE」を第二引数には表示させるURLの「http://www.vba-ie.net/」を設定しています。これにより本サイトがIE(InternetExplorer)で表示されます。
'ウィンドウが最小化されているかのチェック
If IsIconic(objIE.hWnd) Then
ShowWindowAsync objIE.hWnd, SW_RESTORE
End If
こちらは、条件分岐のIf~Then~Elseステートメントを利用してIEウィンドウが最小化されているかのチェックを行っています。条件にはIsIconic関数を利用しており引数に「objIE.hWnd」を設定しています。
InternetExplorerオブジェクトのHwndプロパティはIEウィンドウのハンドルを返します。ハンドルとは、デスクトップ上に開いているそれぞれのウィンドウにOSが付けた管理番号になります。こちらを利用することでどのウィンドウかを判断することができます。
また、IsIconic関数の戻り値はウィンドウが最小化されている場合は「0以外の値」を最小化されていない場合は「0」を返します。数値型をブール型(Boolean)に変換すると「真(True)」は0以外の値になります。
よって、IEウィンドウが最小化されている場合が「真(True)」になりますので、指定されたウインドウの表示状態を設定するShowWindowAsync関数が実行されます。こちらの引数には、IEウィンドウのハンドルと定数SW_RESTOREが設定されています。
定数SW_RESTOREには「9」が格納されていましたが、こちらはウィンドウが最小化または最大化されている場合にウィンドウの位置とサイズを元に戻す処理になります。以下は設定値になりますので、参考にしてください。
定数 | 値 | 内容 |
---|---|---|
SW_HIDE | 0 | ウィンドウを非表示にして、他のウィンドウをアクティブにします。 |
SW_SHOWNORMAL | 1 | ウィンドウをアクティブにして表示します。ウィンドウが最小化または最大化されている場合は、ウィンドウの位置とサイズを元に戻します。アプリケーションは、最初にウィンドウを表示させるときにこのフラグを指定するべきです。 |
SW_SHOWMINIMIZED | 2 | ウィンドウをアクティブにして、最小化されたウィンドウとして表示します。 |
SW_SHOWMAXIMIZED, SW_MAXIMIZE | 3 | ウィンドウをアクティブにして、最大化されたウィンドウとして表示します。 |
SW_SHOWNOACTIVATE | 4 | ウィンドウをアクティブにはせずに表示します。 |
SW_SHOW | 5 | ウィンドウをアクティブにして、現在の位置とサイズで表示します。 |
SW_MINIMIZE | 6 | 指定されたウィンドウを最小化して、次の Z オーダーにあるトップレベルウィンドウをアクティブにします。 |
SW_SHOWMINNOACTIVE | 7 | ウィンドウを最小化されたウィンドウとして表示します。ウィンドウはアクティブ化されません。 |
SW_SHOWNA | 8 | ウィンドウを現在の位置とサイズで表示します。ウィンドウはアクティブ化されません。 |
SW_RESTORE | 9 | ウィンドウをアクティブにして表示します。ウィンドウが最小化または最大化されている場合は、ウィンドウの位置とサイズを元に戻します。アプリケーションは、最小化されたウィンドウの位置とサイズを元に戻すときにこのフラグを指定するべきです。 |
SW_SHOWDEFAULT | 10 | アプリケーションを起動したプログラムが?CreateProcess?関数にパラメータとして渡した?STARTUPINFO?構造体で指定されている SW_ 値に基づいて表示状態が設定されます。 |
SW_FORCEMINIMIZE | 11 | Windows 2000/XP:?ウィンドウを所有しているスレッドがハングしている状態であっても、ウィンドウを最小化します。他のスレッドからウィンドウを最小化させる場合にのみ、このフラグを使用するべきです。 |
こちらの処理は、次のIEウィンドウを最前面に表示させる準備になります。最小化した状態では最前面に表示させることができませんので、IEウィンドウの最小化の状態を回避するための処理になります。
'IEを最前面に表示
SetForegroundWindow (objIE.hWnd)
End Sub
指定したウィンドウを最前面に表示させるSetForegroundWindow関数にIEウィンドウのハンドルを設定しています。これによりIEウィンドウが最前面に表示されます。
最後はEndステートメントを利用してsampleプロシージャを終了させます。
IE(InternetExplorer)ウィンドウを最前面に表示させるサブルーチン「ieForeground」の解説
こちらは、IE(InternetExplorer)ウィンドウを最前面に表示させるサブルーチンになります。
Declare Function IsIconic Lib "user32.dll" (ByVal hWnd As Long) As Long
Declare Function SetForegroundWindow Lib "user32.dll" (ByVal hWnd As Long) As Long
Declare Function ShowWindowAsync Lib "user32.dll" ( _
ByVal hWnd As Long, _
ByVal nCmdShow As Long _
) As Long
Const SW_RESTORE As Long = 9
Sub ieForeground(objIE As InternetExplorer)
'ウィンドウが最小化されているかのチェック
If IsIconic(objIE.hWnd) Then
ShowWindowAsync objIE.hWnd, SW_RESTORE
End If
'IEを最前面に表示
SetForegroundWindow (objIE.hWnd)
End Sub
それでは、VBAコードを1つずつ説明していきます。
Declare Function IsIconic Lib "user32.dll" (ByVal hWnd As Long) As Long
Declare Function SetForegroundWindow Lib "user32.dll" (ByVal hWnd As Long) As Long
Declare Function ShowWindowAsync Lib "user32.dll" ( _
ByVal hWnd As Long, _
ByVal nCmdShow As Long _
) As Long
Const SW_RESTORE As Long = 9
まず、最前面表示に必要なWindows APIを使用できるようにAPIの宣言をします。宣言するAPIはIsIconic関数・SetForegroundWindow関数・ShowWindowAsync関数の3つです。また、定数SW_RESTOREに「9」を設定しています。こちらの値はShowWindowAsync関数の引数に利用されます。
Sub ieForeground(objIE As InternetExplorer)
こちらはSubステートメントに引数を1つ設定しているieForegroundサブルーチンになります。こちらの構文と引数の内容は以下になります。尚、引数はすべて参照渡しで渡されます。
構文 | ieForeground(objIE) | ||||
---|---|---|---|---|---|
引数名 | データ型 | 内容 | 値の事例 | 初期値 | 省略 |
objIE | InternetExplorer | InternetExplorerオブジェクトを指定します。 | objIE,objIE2 | × |
こちらは、必須項目となります。「objIE」にはIEオブジェクトを設定します。複数のIEオブジェクトを操作する場合には「objIE」「objIE2」といった操作するIEオブジェクトを指定してください。オブジェクト作成により、プロパティやメソッドの利用が可能となりIE(InternetExplorer)を制御することがでます。
'ウィンドウが最小化されているかのチェック
If IsIconic(objIE.hWnd) Then
ShowWindowAsync objIE.hWnd, SW_RESTORE
End If
こちらは、IEウィンドウが最小化されているかのチェックを行っています。IEウィンドウが最小化されている場合が「真(True)」になりますので、指定されたウインドウの表示状態を設定するShowWindowAsync関数が実行されます。
'IEを最前面に表示
SetForegroundWindow (objIE.hWnd)
End Sub
指定したウィンドウを最前面に表示させるSetForegroundWindow関数にIEウィンドウのハンドルを設定しています。
こちらを利用することで、IEウィンドウを最前面に表示できるようになります。それでは、こちらを利用したサンプルコードを見ていきましょう。
「ieForeground」を利用してIE(InternetExplorer)ウィンドウを最前面に表示するサンプルコード
Sub sample()
Dim objIE As InternetExplorer
'本サイトをIEで表示
Call ieView(objIE, "http://www.vba-ie.net")
'IEを最前面に表示
Call ieForeground(objIE)
End Sub
解説
まず、変数objIEに「InternetExplorer型」を宣言しています。次にCallステートメントを利用してieViewサブルーチンを呼び出し本サイトをIE(InternetExplorer)で表示させます。そして、「ieForeground」の引数にInternetExplorerオブジェクトを格納しIEウィンドウを最前面に表示します。
まとめ
今回は、IE(InternetExplorer)ウィンドウを最前面に表示させる方法について解説しました。こちらは、BASIC認証を自動化させたい場合や、確実にSendKeysステートメントを利用したい場合などにとても有効です。次回はエクセルBAでIEウィンドウの各種バーを表示・非表示にする方法について解説します。
次の記事: エクセルVBAでIEウィンドウの各種バーを表示・非表示にする >>
近田 伸矢, 植木 悠二, 上田 寛
IEのデータ収集&自動操作のプログラミング本はこの1冊だけ!IEの起動やポップアップウィンドウ、表示を制御する基本的なコードはもちろん、テキストボックスやラジオボタン、表、ハイパーリンクなどのHTML部品を制御する方法など、自動操作に欠かせないノウハウを丁寧に解説。