- VBSで特定のウィンドウをアクティブ化する方法が知りたい
リストからURLを読み込みIEでアクセスしたらスクリーンショットを撮る、というスクリプトを作成していた時にハマったVBSでIE(Internet Explorer)の画面をアクティブ化(最前面表示)させる方法について解説します。
タップできる目次
VBSでIE(Chrome,Firefox,Edge)をアクティブ化(最前面表示)する方法
VBSでIE(Chrome,Firefox,Edge)をアクティブ化(最前面表示)する流れ
プロセスIDを取得する
プログラムが起動するとプロセスIDが割り当てられます。このプロセスIDを使って起動済みのプログラムを再起動させたり終了させる事ができます。
VBSでプロセスIDを取得するための関数は次のように書く事ができます。この関数に引数でプロセス名(chrome.exeだとかfirefox.exe)を渡すとプロセスIDが返ってきます。
Function GetProcID(ProcessName)
Dim Service
Dim QfeSet
Dim Qfe
Dim intProcID
Set Service = WScript.CreateObject("WbemScripting.SWbemLocator").ConnectServer
Set QfeSet = Service.ExecQuery("Select * From Win32_Process Where Caption='"& ProcessName &"'")
intProcID = 0
For Each Qfe in QfeSet
intProcID = Qfe.ProcessId
Exit For
Next
GetProcID = intProcID
End Function
プロセス名が分からない場合はタスクマネージャーで調べる事ができます。
プロセスIDを利用してIEをアクティブ化(最前面表示)する
先ほどの方法でブラウザのプロセスIDは取得できるので、あとはアクティブ化するだけです。
CreateObject(“Wscript.Shell”)でオブジェクトを作成して、AppActivate メソッドにプロセスIDを指定するだけでウィンドウがアクティブ化します。
Set objWshShell = CreateObject("Wscript.Shell") objWshShell.AppActivate <プロセスID>
VBSでIEをアクティブ化(最前面表示)するだけのコード
それでは、ただ単にブラウザをアクティブ化するVBSコードです。次のVBSを適当なファイル名(拡張子は.vbs)で保存してください。ファイルをダブルクリックすると、起動済みのブラウザをアクティブ化します。
ブラウザはもはやIEは古いので普及率が高いGoogle Chromeにしました。6行目の箇所がそれです。Firfoxであれば”firefox.exe”、Edgeであれば”MicrosoftEdgeCP.exe”に変えてください。
Option Explicit
Dim objWshShell
Dim intProcID
intProcID = GetProcID("chrome.exe")
Set objWshShell = CreateObject("Wscript.Shell")
objWshShell.AppActivate intProcID
Set objWshShell = Nothing
Function GetProcID(ProcessName)
Dim Service
Dim QfeSet
Dim Qfe
Dim intProcID
Set Service = WScript.CreateObject("WbemScripting.SWbemLocator").ConnectServer
Set QfeSet = Service.ExecQuery("Select * From Win32_Process Where Caption='"& ProcessName &"'")
intProcID = 0
For Each Qfe in QfeSet
intProcID = Qfe.ProcessId
Exit For
Next
GetProcID = intProcID
End Function
まとめ
単純にウィンドウをアクティブ化するだけのコードですが、色々なところで役に立つのではないかと思います。
注意点として、複数のウィンドウを立ち上げている場合は一番最後に起動したもののみアクティブ化します。
すべてのウィンドウをアクティブ化したい場合は、それぞれのプロセスIDを取得して順次アクティブ化する処理をおこなう必要があります。