WinActivate

指定したウィンドウをアクティブにします。

WinActivate WinTitle, WinText, ExcludeTitle, ExcludeText

パラメータ

WinTitle、WinText、ExcludeTitle、ExcludeText

型:文字列整数またはオブジェクト

もしこれらの項目が未設定または省略されたときは、最後に見つかったウィンドウが使用されます。そうでないときは、WinTitleウィンドウタイトルまたはターゲットウィンドウを識別するための他の基準、および/またはWinTextにターゲットウィンドウの単一のテキスト要素からの部分文字列(付属のWindow Spyユーティリティを使えばわかります)を指定します。

ExcludeTitleExcludeTextはウィンドウのタイトルまたはテキストで除外するために使用します。指定の仕方はWinTitleWinTextに似ていますが、ExcludeTitleはウィンドウのタイトル以外の基準(ウィンドウクラスやHWNDなど)を認識しません。

ウィンドウのタイトルとテキストは大文字と小文字を区別します。DetectHiddenWindows関数 と DetectHiddenText関数で変更しない限り、初期設定では非表示ウィンドウは検出されず、非表示テキストは検出されます。SetTitleMatchMode関数で変更しない限り、初期設定ではウィンドウのタイトルはその中のどこかにWinTitleまたはExcludeTitleを含んでいれば一致します。

エラー処理

ウィンドウが見つからないときは、TargetErrorがスローされます。

備考

非アクティブなウィンドウがアクティブになると、オペレーティング・システムはそのウィンドウも最前面にする(スタックの一番上に持ってくる)。ウィンドウがすでにアクティブになっている場合は発生しない。

ウィンドウが最小化されて非アクティブになると、アクティブになる前に自動的に復元される。WinTitleが文字 "A"で、他のパラメータが省略された場合、アクティブなウィンドウが復元される。ウィンドウがすでにアクティブであったとしても、復元される。

60ミリ秒の間に6回、ターゲットウィンドウの活性化を試みる。6回の試行がすべて失敗した場合、WinActivateは自動的に{Alt 2}を送信し、オペレーティングシステムによる制限を回避します。したがって、通常WinActivateの後にWinWaitActiveWinActive(...)でなければWinActivateを続ける必要はない。

WinActivateの最初の試みが失敗すると、自動的に{Alt up}が送信される。テストによると、最初の試行が失敗してタスクバーボタンが点滅するケースが減り、その後のすべての試行の信頼性が向上する可能性がある。このために送信される{Alt up}は、各スクリプトの有効期間中1回までである。このスクリプトまたは他の(AutoHotkey v1.1.27+)スクリプトにキーボードフックがインストールされている場合、{Alt up}はアクティブウィンドウからブロックされ、副作用のリスクを最小限に抑えます。

一般的に、複数のウィンドウがマッチした場合、一番上のマッチしたウィンドウ(通常、最も最近使用されたウィンドウ)がアクティブになる。ウィンドウがすでにアクティブになっている場合、その下にある他のマッチするウィンドウをアクティブにするのではなく、アクティブな状態を維持する。しかし、WinMoveBottomでアクティブ・ウィンドウをスタックの一番下に移動させると、アクティブ・ウィンドウが一致しても、他のウィンドウがアクティブになることがある。

WinActivateBottomは、一番下のマッチするウィンドウをアクティブにする(通常、一番最近使われたウィンドウ)。

GroupActivateは、ウィンドウグループで指定された条件に一致する次のウィンドウをアクティブにする。

アクティブ・ウィンドウが非表示で、DetectHiddenWindowsがオフになっている場合、マッチするとはみなされない。その代わり、マッチング・ウインドウがあれば、それが表示される。

他のウィンドウをアクティブにした直後にウィンドウをアクティブにすると、システムによってはタスクバーのボタンが点滅し始めることがあります(OSや設定によって異なります)。これを防ぐために、#WinActivateForceを使ってください。

既知の問題:スクリプトがリモートデスクトップ経由でアクセスされているコンピュータまたはサーバー上で実行されている場合、リモートデスクトップクライアントが最小化されていると、WinActivateがハングすることがあります。回避策のひとつは、ControlSendControlClickのような、ウィンドウのアクティブ化を必要としない組み込み関数を使うことです。もう1つの可能な回避策は、ローカル/クライアントコンピュータで以下のレジストリ設定を適用することです:

HKCUをHKLMに変更し、このシステムのすべてのユーザーに影響を与える。
RegWrite "REG_DWORD", "HKCU\Software\Microsoft\Terminal Server Client"
    , "RemoteDesktop_SuppressWhenMinimized", 2

WinActivateBottom, #WinActivateForce, SetTitleMatchMode, DetectHiddenWindows, Last Found Window, WinExist, WinActive, WinWaitActive, WinWait, WinWaitClose, WinClose, GroupActivate, Win functions

メモ帳があればそれを起動し、なければ電卓を起動する。

if WinExist("Untitled - Notepad")
    WinActivate ; WinExistで見つかったウィンドウを使用します。
else
    WinActivate "Calculator"