任意のウィンドウを常に最前面にして操作をしたいという場合に Autoit の関数を使えば簡単に実現することが出来ます。
指定したウィンドウを常に最前面に表示するサンプルコード
今回使用する関数は ShellExecute、WinWait、WinActivate、WinSetOnTop 関数です。
WinWait
指定したウィンドウが存在するようになるまでスクリプトの実行を一時停止します。
形式:WinWait ( “ウィンドウのタイトル” [, “テキスト” [, タイムアウト]] )
WinActivate
ウィンドウをアクティブにします。
形式:WinActivate ( “ウィンドウのタイトル” [, “テキスト”] )
WinSetOnTop
ウィンドウの属性を「常に最前面に表示」に変更します。
形式:WinSetOnTop ( “ウィンドウのタイトル”, “テキスト”, フラグ)
フラグ:1=最前面表示、0 = 最前面表示を解除
サンプルコード
ここでは Windows の音量を変更する「音量ミキサー」のウィンドウを常に最前面に表示します。
ShellExecute("Sndvol.exe")
WinWait("音量ミキサー")
WinActivate("音量ミキサー")
WinSetOnTop("音量ミキサー", "", 1)
ウィンドウのタイトルは「音量ミキサー – スピーカー (Conexant SmartAudio HD)」となっていますが、「音量ミキサー」のみで構いません。
Autoit のデフォルトではウィンドウタイトルの前方の名前に一致します。
ShellExecute 関数で音量ミキサーを開き、WinWait 関数で音量ミキサーのウィンドウが存在するようになるまで一時停止します。
WinActivate 関数でウィンドウをアクティブにし、WinSetOnTop 関数で常に最前面に表示するようにします。
WinActivate 関数は使わなくてもいいのではないか?と思うかもしれませんが、別のウィンドウがアクティブになっている際に WinSetOnTop 関数で最前面に表示しようとしても失敗します。
例えば次のコードを実行してみると分かります。
ShellExecute("Sndvol.exe")
Sleep(2000)
WinWait("音量ミキサー")
;~ WinActivate("音量ミキサー")
WinSetOnTop("音量ミキサー", "", 1)
スリープの間に別のウィンドウをアクティブにしてみてください。
コードの実行後に音量ミキサーのウィンドウは常に最前面に表示されません。
Autoit の WinSetOnTop 関数はアクティブなウィンドウに対して有効であるということを覚えておきましょう。
コメント