ウィンドウ操作のコマンド

関連するコマンド

  • Controls
  • Window Groups
    • GroupActivate
    • GroupAdd
    • GroupClose
    • GroupDeactivate
  • #WinActivateForce
  • DetectHiddenText
  • DetectHiddenWindows
  • IfWinActive / IfWinNotActive
  • IfWinExist / IfWinNotExist
  • SetTitleMatchMode
  • SetWinDelay
  • StatusBarGetText
  • StatusBarWait
  • WinActivate
  • WinActivateBottom
  • WinClose
  • WinGet
  • WinGetActiveStats
  • WinGetActiveTitle
  • WinGetClass
  • WinGetPos
  • WinGetText
  • WinGetTitle
  • WinHide … ウィンドウを非表示にする (タスクバーにも表示されない)
  • WinKill
  • WinMaximize … ウィンドウを最大化する
  • WinMinimize … ウィンドウをタスクバーに最小化する
  • WinMinimizeAll / WinMinimizeAllUndo
  • WinMove
  • WinRestore … 最小化や最大化されているウィンドウを元に戻す
  • WinSet
  • WinSetTitle
  • WinShow … 非表示にされているウィンドウを表示する
  • WinWait
  • WinWaitActive / WinWaitNotActive
  • WinWaitClose

ウィンドウの情報の取得

WinGet

指定ウィンドウのユニークID、プロセスID、プロセス名またはそれらのコントロールの一覧を取得できます。

WinGet,
    OutputVar
    [,Cmd,
    WinTitle,
    WinText,
    ExcludeTitle,
    ExcludeText ]
WinGet

取得結果はOutputVarに格納されます。マッチするウィンドウが存在しなかったときには、これは空文字列となります。

Cmdで、取得する内容を指定します。これを省略すると、IDが指定されているとみなされます。

Cmdの値
取得内容
ID ウィンドウのユニークID (ウィンドウハンドル)
IDLast  
PID  
ProcessName  
ProcessPath  
Count  
List  
MinMax  
ControlList  
ControlListHwnd  
Transparent  
TransColor  
Style ウィンドウ スタイル
ExStyle

WinGetClass

指定ウィンドウのクラス名を取得できます。

WinGetClass,
    OutputVar
    [, WinTitle,
    WinText,
    ExcludeTitle,
    ExcludeText ]
WinGetClass

取得結果はOutputVarに格納されます。マッチするウィンドウが存在しなかったときには、これは空文字列となります。

WinGetTitle

指定ウィンドウのタイトルを取得できます。なお取得できる内容は、Window Spyでのそれと同一です。

WinGetTitle,
    OutputVar
    [, WinTitle,
    WinText,
    ExcludeTitle,
    ExcludeText ]
WinGetTitle

取得結果はOutputVarに格納されます。マッチするウィンドウが存在しなかったときには、これは空文字列となります。

WinGetTitle, title, A
MsgBox, %title%

WinGetPos

指定ウィンドウの位置とサイズを取得できます。

WinGetPos
    [, X,
    Y,
    Width,
    Height,
    WinTitle,
    WinText,
    ExcludeTitle,
    ExcludeText ]
WinGetPos

取得結果はそれぞれの変数に格納されます。マッチするウィンドウが存在しなかったときには、これらは空文字列となります。

最小化されているウィンドウも位置を返します。どのような値を返すかはOSによって異なりますが、Windowsでは「-32000」となります。

ウィンドウの情報の変更

WinSet

指定ウィンドウの状態を変更できます。

WinSet,
    Attribute,
    Value
    [, WinTitle,
    WinText,
    ExcludeTitle,
    ExcludeText ]
WinSet

何を変更するかをAttributeで、どのように変更するかをValueで指定します。

WinGetで取得できるすべての情報を、設定できるわけではありません。

Attributeの値 説明
AlwaysOnTop すべての他のウィンドウの最上位にとどめる (最前面する)
Bottom スタックの最下位にする
Top スタックの最上位にする。ただしアクティブにはしない
Disable  
Enable  
Redraw  
Style ウィンドウ スタイルを変更します。

指定値の符号により挙動が異なります。

  • + … スタイルを追加する
  • - … スタイルを取り除く
  • ^ … スタイルを交互に切り替える
  • なし … スタイルを上書きする
ExStyle
Region  
Transparent  
TransColor  

ウィンドウの状態の変更

WinMove

指定ウィンドウの位置とサイズ、またはいずれかを変更できます。

WinMove, X, Y
WinMove,
    WinTitle,
    WinText,
    X,
    Y
    [, Width,
    Height,
    ExcludeTitle,
    ExcludeText ]
WinMove

ウィンドウの位置はスクリーン座標で指定します。

最大化されているウィンドウは、先にWinRestoreで元に戻した上でサイズを変更します。さもなくばユーザーはそのウィンドウのサイズを、通常の手段で変更できなくなってしまいます。

なお指定ウィンドウの位置とサイズは、WinGetPosで取得できます。

マルチモニタでのウィンドウの移動

Windows 7以降ではWin + Shift + ←Win + Shift + →のキーで、異なるモニタへウィンドウを移動できます。これを利用すれば

Send, #+{Right}

のようにすることで、モニタ間を移動させられます。

WinActivate

指定ウィンドウをアクティブにできます。最小化されているときには、元に戻してからアクティブにされます。

WinActivate [, WinTitle, WinText, ExcludeTitle, ExcludeText]
WinActivate

このコマンドでは6つの方法でアクティブ化を試みます。よって通常はWinWaitActiveで待つ必要はありません。

このコマンドでアクティブにできないときは、WinTitle条件を追加して、より具体的にウィンドウを指定します。

他のウィンドウがアクティブになった直後にウィンドウをアクティブにすると、タスクバーのボタンがフラッシュすることがあります。これを防ぐには#WinActivateForceを使用します。

逆に非アクティブにするには、次のような方法があります。

  • WinMinimize, A … アクティブなウィンドウを最小化
  • WinHide, A … アクティブなウィンドウを非表示
  • Send, !{ESC}Windowsのショートカットキーにより、アクティブなウィンドウをウィンドウ スタックの最下位に移動

WinMinimize

ウィンドウを最小化できます。

WinMinimize [, WinTitle, WinText, ExcludeTitle, ExcludeText]
WinMinimize

最小化できない、もしくは最小化できてもフォーカスが残ったままになるような場合には、次のようにPostMessageでコマンドを送ります。

WM_SYSCOMMAND := 0x112
SC_MINIMIZE := 0xF020

PostMessage, WM_SYSCOMMAND, SC_MINIMIZE,,, A

WinRestore

最小化や最大化されているウィンドウを元に戻せます。

WinRestore [, WinTitle, WinText, ExcludeTitle, ExcludeText]
WinRestore

このコマンドはウィンドウのサイズを変更するだけのため、サイズを戻したときに他のウィンドウに隠れてしまい、前面に表示されないことがあります。そのような場合には代わりにWinActivateを用いて、サイズを戻すと同時にウィンドウがアクティブになるようにします。

WinHide

ウィンドウを非表示にできます。

WinHide [, WinTitle, WinText, ExcludeTitle, ExcludeText]
WinHide

このコマンドで非表示にするとタスクバーにも表示されなくなるため、通知領域のアイコンから表示できるアプリケーション以外は、通常の手段で表示できなくなります。

アクティブなウィンドウを非表示にしてもフォーカスはそのウィンドウから外れず、キー入力は非表示にされたウィンドウへ送られます。

WinHideで非表示にしたウィンドウは、WinShowで表示できます。

WinShow

非表示にされているウィンドウを表示できます。

WinShow [, WinTitle, WinText, ExcludeTitle, ExcludeText]
WinShow

このコマンドではDetectHiddenWindowsの設定は無視されるため、非表示のウィンドウが対象外とされていても問題ありません。

このコマンドでは表示状態を変更するだけのため、ウィンドウが表示される位置によっては他のウィンドウに隠されることがあります。よって同時に、WinActivateでアクティブにするのが確実です。

WinShow, ahk_class Notepad
WinActivate, ahk_class Notepad

ウィンドウの状態の確認

IfWinExist

指定ウィンドウが存在するときだけ、続く処理を実行できます。

IfWinExist
    [, WinTitle,
    WinText,
    ExcludeTitle,
    ExcludeText ]
IfWinExist / IfWinNotExist / WinExist
IfWinExist, ahk_class Notepad
{
    ; 何らかの処理
}

このコマンドでは、最小化されていてもそのウィンドウは存在しているとみなされます。よって最小化されていないときに処理を実行するには、WinGetPosを用いて次のようにします。

WinGetPos, winX, , , , ahk_class Notepad
if winX && winX != -32000
{
    ; 何らかの処理
}

また最小化時に通知領域のアイコンのみで表示される場合には、このコマンドでは存在を検出できません。よってそのようなウィンドウに対してはProcessコマンドを用いて、次のようにします。

Process, Exist, notepad.exe
If( ErrorLevel != 0 )
{
    ; 何らかの処理
}

IfWinActive

指定ウィンドウがアクティブなときだけ、続く処理を実行できます。

IfWinActive
    [, WinTitle,
    WinText,
    ExcludeTitle,
    ExcludeText ]
IfWinActive / IfWinNotActive / WinActive

アクティブかどうかではなくアプリケーションが起動しているかを調べるにはProcessコマンドを、アプリケーションではなくコントロールを調べるにはControlGetFocusを用います。また処理の実行ではなくホットキーの発動を制御するならば、指示命令の#IfWinActiveを用います。

ウィンドウの状態の監視

WinWait

指定ウィンドウが、存在するようになるまで待たせられます。

WinWait
    [, WinTitle,
    WinText,
    Seconds,
    ExcludeTitle,
    ExcludeText]
WinWait

Secondsで、タイムアウトしてErrorLevelが1となるまでの秒数を指定します。0と指定すると0.5と解釈され、これを省略すると無期限に待ちます。このパラメータはで指定できます。

WinWaitActive

指定ウィンドウが、アクティブになるまで待たせられます。

WinWaitActive
    [, WinTitle,
    WinText,
    Seconds,
    ExcludeTitle,
    ExcludeText]
WinWaitActive / WinWaitNotActive

Secondsの用法はWinWaitと同じです。

ウィンドウ メッセージ

PostMessage / SendMessage

ウィンドウやコントロールへメッセージを送れます。

PostMessage,
    Msg
    [, wParam,
    lParam,
    Control,
    WinTitle,
    WinText,
    ExcludeTitle,
    ExcludeText]
SendMessage,
    Msg
    [, wParam,
    lParam,
    Control,
    WinTitle,
    WinText,
    ExcludeTitle,
    ExcludeText,
    Timeout]
PostMessage / SendMessage

有効なMsgの値は、List of Windows Messagesにあります。

WM_SYSCOMMAND := 0x112
SC_MINIMIZE := 0xF020

PostMessage, WM_SYSCOMMAND, SC_MINIMIZE,,, A

コントロール

Control

コントロールを制御できます。このコマンドはウィンドウのそれとは命名規則が異なり、ControlSetという名称ではありません。

Control,
    Cmd
    [, Value,
    Control,
    WinTitle,
    WinText,
    ExcludeTitle,
    ExcludeText]
Control
Cmdの値
 
Check Turns on (checks) a radio button or checkbox.
Uncheck Turns off a radio button or checkbox.
Enable Enables a control if it was previously disabled.
Disable Disables or "grays out" a control.
Show Shows a control if it was previously hidden.
Hide Hides a control.
Style, N or ExStyle, N Changes the style or extended style of a control, respectively.
ShowDropDown Drops a ComboBox so that its choices become visible.

テキスト部が編集可能なComboBoxは、下向きの矢印部のClassNNがテキスト部とは異なっており、一覧を表示するには矢印部のClassNNを指定します。

HideDropDown Reverses the above.
TabLeft [, Count] and TabRight [, Count] Moves left or right by one or more tabs in a SysTabControl32.
Add, String Adds String as a new entry at the bottom of a ListBox, ComboBox (and possibly other types).
Delete, N Deletes the Nth entry from a ListBox or ComboBox.
Choose, N Sets the selection in a ListBox (リストボックス) or ComboBox (コンボボックス) to be the Nth entry.
ChooseString, String Sets the selection (choice) in a ListBox or ComboBox to be the first entry whose leading part matches String.
EditPaste, String Pastes String at the caret/insert position in an Edit control (this does not affect the contents of the clipboard).

たとえば[デスクトップの表示]を非表示とするには、次のようにします。

Control, Hide, , TrayShowDesktopButtonWClass1, ahk_class Shell_TrayWnd

ControlGet

コントロールの情報を取得できます。

ControlGet,
    OutputVar,
    Cmd
    [, Value,
    Control,
    WinTitle,
    WinText,
    ExcludeTitle,
    ExcludeText ]
ControlGet

ControlはClassNNまたはコントロールのテキストで指定し、テキストで指定する場合にはSetTitleMatchModeの設定で検索されます。このControlで対象を指定しなかった場合は、対象ウィンドウの最上位のコントロールが対象となります。

ControlGet, info, Style, , Edit1
MsgBox, %info%
Cmdの値
 
List Retrieves a list of items from a ListView, ListBox, ComboBox, or DropDownList.
Checked Retrieves 1 if the checkbox or radio button is checked or 0 if not.
Enabled Retrieves 1 if the control is enabled, or 0 if disabled.
Visible Retrieves 1 if the control is visible, or 0 if hidden.
Tab Retrieves the tab number of a SysTabControl32 control.
FindString Retrieves the entry number of a ListBox or ComboBox that is an exact match for the string.
Choice Retrieves the name of the currently selected entry in a ListBox or ComboBox.
LineCount Retrieves the number of lines in an Edit control.
CurrentLine Retrieves the line number in an Edit control where the caret resides.
CurrentCol Retrieves the column number in an Edit control where the caret resides.
Line Retrieves the text of the specified line number in an Edit control.
Selected Retrieves the selected text in an Edit control.
Style Retrieves an 8-digit hexadecimal number representing the style of the control.
ExStyle Retrieves an 8-digit hexadecimal number representing the extended style of the control.
Hwnd [v1.1.04+] Retrieves the window handle (HWND) of the control.

ControlGetText

コントロールのテキストを取得できます。

ControlGetText,
    OutputVar
    [, Control,
    WinTitle,
    WinText,
    ExcludeTitle,
    ExcludeText]
ControlGetText
ControlGetText, controlText, Edit1, A
MsgBox, %controlText%

なお、このコマンドで取得できるのはWindow Spyの[Control Under Mouse Position]のTextと同じであり、これで取得できない情報はこのコマンドでも取得できません。

ControlSetText

コントロールのテキストを変更できます。

ControlSetText
    [, Control,
    NewText,
    WinTitle,
    WinText,
    ExcludeTitle,
    ExcludeText]
ControlSetText

TextBoxなどのテキストを変更するとアプリケーションがそれを認識できず、変更前のテキストのまま処理されることがあります。

ControlFocus

ウィンドウの指定コントロールにフォーカスを合わせられます。

ControlFocus
    [, Control,
    WinTitle,
    WinText,
    ExcludeTitle,
    ExcludeText ]
ControlFocus

Controlは、ClassNNまたはコントロールのテキストで指定します。このパラメータを指定しなかった場合は、ウィンドウの最上位のコントロールが指定されたものとみなされます。

ControlFocus, SysTabControl321

ControlGetFocus

対象ウィンドウでフォーカスを得ているコントロールを取得できます。

ControlGetFocus,
    OutputVar
    [, WinTitle,
    WinText,
    ExcludeTitle,
    ExcludeText ]
ControlGetFocus

アクティブなウィンドウで特定のコントロール、たとえばButton1がフォーカスを得ているときに処理を実行するには、次のようにします。

ControlGetFocus, focusedControl, A
if( focusedControl == "Button1" )
{
    ; 何らかの処理
}

ControlGetPos

ControlGetPos [,
    X,
    Y,
    Width,
    Height,
    Control,
    WinTitle,
    WinText,
    ExcludeTitle,
    ExcludeText]
ControlGetPos

一致するウィンドウやコントロールがなかったときには、出力される変数は空白となります。

メニューの制御

WinMenuSelectItem

指定ウィンドウのメニューバーにある項目を実行できます。

WinMenuSelectItem,
    WinTitle,
    WinText,
    Menu
    [, SubMenu1,
    SubMenu2,
    SubMenu3,
    SubMenu4,
    SubMenu5,
    SubMenu6,
    ExcludeTitle,
    ExcludeText ]
WinMenuSelectItem

Menuでメニュー項目を、SubMenuNでそのサブメニューを指定します。メニューは、

  • FileやEditのように、そのメニューの名前で指定
  • 1&や2&のように、メニューの表示順で指定

の2つの指定方法があります。名前で指定するときは前方一致となります。よってたとえば、

WinMenuSelectItem, ahk_class Notepad, , ファイ, 開く

のように名前を省略しても機能します。表示順で指定するときは、メニューの区切り線も1つとカウントします。

最小化されていなければ、アクティブではないウィンドウも操作できます。しかしMicrosoft Outlookのような標準的ではないメニューは操作できないため、そのような場合にはSendコマンドで代用します。

AutoHotKeyの設定

SetTitleMatchMode

WinWaitなどのコマンドの、WinTitleパラメータのマッチ方法を設定できます。

SetTitleMatchMode, MatchMode
SetTitleMatchMode
MatchMode
説明
1 前方一致 (指定文字列から始まるタイトルに一致)
2 中間一致 (指定文字列を含むタイトルに一致)
3 完全一致 (指定文字列と同一のタイトルに一致)
RegEx 正規表現による一致 (v1.0.45以降)

DetectHiddenWindows

ウィンドウを探索するときに、非表示のウィンドウも対象とするかを設定できます。

DetectHiddenWindows, On|Off
DetectHiddenWindows

既定ではOffとなっています。