【VBS】ウィンドウを最前面に表示する
ちょっと息抜きにVBScriptについて質問されました。
VBScriptからIEを起動して処理を行っているが、ウィンドウが最前面に存在しないため、キー操作がうまくいかないとのこと。
それだけの問題であれば最前面に表示するだけではないのかと思いきや、そこまで単純ではないようです。
検索して最初の方に出てくるVBScriptのコードです。
Dim objIE0
Dim objWshShell
' IEを開く
Set objIE0 = CreateObject("InternetExplorer.Application")
objIE0.Visible = True
objIE0.Navigate "https://www.google.co.jp"
' 開いているIEをアクティブにする
Set objWshShell = CreateObject("Wscript.Shell")
objWshShell.AppActivate "Google"
ドヤ顔でこのコードを書いたのですが、裏でアクティブ化されるだけなのでキー操作はやはり受け付けません。
もう少し調べてみると、この状態になっている方が結構いるようですね。
少し頭を捻って考えました。
すべてを最小化した後にIEを起動します。
Dim objIE0
Dim objWshShell
' 画面をすべて最小化する
Dim Win
Set Win = WScript.CreateObject("Shell.Application")
Win.MinimizeAll
' IEを開く
Set objIE0 = CreateObject("InternetExplorer.Application")
objIE0.Navigate "https://www.google.co.jp"
objIE0.Visible = True
' 開いているIEをアクティブにする
Set objWshShell = CreateObject("Wscript.Shell")
objWshShell.AppActivate "Google"
コマンドから動かした場合にはうまく動いてくれました。
しかし、フォルダの中にあるVBSファイルをダブルクリックで起動した場合にはIEの起動と共にフォルダが最大化されてうまく動きませんでした。
今回、私が質問を受けたのはVBScriptからIEを起動していたため、別の方法で処理を行うようにしました。
Dim objIE0
Dim objWshShell
' 画面をすべて最小化する
Dim Win
Set Win = WScript.CreateObject("Shell.Application")
Win.MinimizeAll
' 最前面表示で開く
call objShell.Run ("iexplore.exe https://www.google.co.jp", 1, false)
WScript.Sleep 1000
' 開いたIEを取得する
Set objIE0 = CreateObject("InternetExplorer.Application")
Set xShell = CreateObject("Shell.Application")
For Each Window In xShell.Windows
If TypeName(Window.Document) = "HTMLDocument" Then
if Window.Document.url="https://www.google.co.jp" then
Set objIE0 = Window
exit for
end if
end if
next
最初から最前面で表示すれば良いという話ですね。
API等を使用すれば最前面表示ができるようですが、ちょっと面倒でした。
No comments.