サンプルコード

Autoit|指定したウィンドウを常に最前面に表示する

任意のウィンドウを常に最前面にして操作をしたいという場合に 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 関数で常に最前面に表示するようにします。

WinActivate 関数は使わなくてもいいのではないか?と思うかもしれませんが、別のウィンドウがアクティブになっている際に WinSetOnTop 関数で最前面に表示しようとしても失敗します。

例えば次のコードを実行してみると分かります。

ShellExecute("Sndvol.exe")
Sleep(2000)
WinWait("音量ミキサー")
;~ WinActivate("音量ミキサー")
WinSetOnTop("音量ミキサー", "", 1)

スリープの間に別のウィンドウをアクティブにしてみてください。

コードの実行後に音量ミキサーのウィンドウは常に最前面に表示されません。

Autoit の WinSetOnTop 関数はアクティブなウィンドウに対して有効であるということを覚えておきましょう。

コメント