いつも同じアプリケーションを起動するたびに、決まって最大化ボタンを押す、という繰り返し作業はありませんか?特に、常に全画面で使いたいのに、なぜか小さいウィンドウで起動してしまうアプリケーションに対して、この操作は少し面倒に感じます。
今回は、AutoIt を使って特定のウィンドウが手前に来た(アクティブになった)瞬間に、もしそのウィンドウが最大化されていなければ、自動で最大化する、という常駐スクリプトを作成します。
完成したスクリプトの全コード
#include <WindowsConstants.au3>
; ### 設定項目 ###
; ここに、自動で最大化したいウィンドウの「タイトル」を正確に入力します。
; 例として Windows 11 のメモ帳を開いた際のタイトル「タイトルなし」を入力しています。
Local $sTargetWindowTitle = "タイトルなし"
; ### 初期設定 ###
; スクリプトが起動したことを通知し、終了方法を案内します。
TrayTip("ウィンドウ最大化スクリプト", "「" & $sTargetWindowTitle & "」の監視を開始しました。" & @CRLF & "終了するには Esc キーを押してください。", 10)
; Escキーが押されたら「_ExitScript」という関数を呼び出すように設定
HotKeySet("{ESC}", "_ExitScript")
; ### メインの監視ループ ###
While 1
; 1. ウィンドウがアクティブで、
; 2. かつ、まだ最大化されていない場合
If WinActive($sTargetWindowTitle) And Not BitAND(WinGetState($sTargetWindowTitle, ""), $WS_MAXIMIZE) Then
; 3. その場合にのみ、ウィンドウを最大化する
WinSetState($sTargetWindowTitle, "", @SW_MAXIMIZE)
EndIf
; CPUに負荷をかけすぎないように、少し待機する
Sleep(250)
WEnd
; ### スクリプトを終了させるための関数 ###
Func _ExitScript()
Exit
EndFunc ;==>_ExitScript
コードの詳しい解説
監視対象ウィンドウの設定
スクリプトの一番上で、どのウィンドウを監視するかを設定します。
Local $sTargetWindowTitle = "タイトルなし"
この$sTargetWindowTitleという変数に、最大化したいウィンドウのタイトルまたはクラス名を正確に入力してください。
ウィンドウの正確なタイトルは、AutoIt に付属の「AutoIt Window Info Tool」(Au3Info.exe)を使うと簡単に調べることができます。
「AutoIt Window Info Tool」ウィンドウ情報ツールの場所、使い方、サンプルコード
初期設定と終了方法
スクリプトがバックグラウンドで正しく動作していることをユーザーに知らせ、また、いつでも安全に終了できるようにするための設定です。
TrayTip: 画面の右下にポップアップ通知を表示し、監視が開始されたことと、Escキーで終了できることを伝えます。HotKeySet:Escキーを「ホットキー」として登録します。Escキーが押されると、指定された_ExitScript関数が呼び出され、スクリプトが安全に終了します。
メインの監視ループ
このスクリプトの心臓部です。While 1 ... WEndで囲まれた部分は、Escキーが押されるまで無限に繰り返されます。
賢い条件判定
If文の中の条件式が、このスクリプトを「賢く」している重要な部分です。
- WinActive($sTargetWindowTitle) まず、目的のウィンドウが現在 PC 上で一番手前にあるアクティブなウィンドウかどうかを判定します。
- Not BitAND(WinGetState(…), $WS_MAXIMIZE) 次に、ウィンドウがまだ最大化されていないことを確認します。
WinGetState: ウィンドウの現在の状態(表示、最小化、最大化など)を数値で取得します。BitAND: 取得した状態の数値に、「最大化状態」を示すフラグ$WS_MAXIMIZEが含まれているかをチェックします。Not: 結果を反転させ、「最大化されていない」場合にのみ条件が真になるようにします。
この 2つの条件をAndでつなぐことで、「目的のウィンドウがアクティブで、かつ、まだ最大化されていない時」という、非常に的確な実行タイミングを作り出しています。
これにより、既に最大化されているウィンドウに対して無駄な最大化命令を送ることがなくなり、効率的に動作します。
まとめ
このスクリプトは、特定のウィンドウの状態を監視し、条件に応じて操作するという、AutoIt の得意な自動化処理の典型的な例です。
WinActive と WinGetState を組み合わせることで、よりきめ細やかな条件分岐が可能になり、日々の PC 作業を快適にするための様々なツールに応用できます。
コメント