指定ウィンドウのユニークID、プロセスID、プロセス名またはそれらのコントロールの一覧を取得できます。
WinGet, OutputVar [,Cmd, WinTitle, WinText, ExcludeTitle, ExcludeText ]WinGet
取得結果はOutputVarに格納されます。マッチするウィンドウが存在しなかったときには、これは空文字列となります。
Cmdで、取得する内容を指定します。これを省略すると、IDが指定されているとみなされます。
値 | 取得内容 |
---|---|
ID | ウィンドウのユニークID (ウィンドウハンドル) |
IDLast | |
PID | |
ProcessName | |
ProcessPath | |
Count | |
List | |
MinMax | |
ControlList | |
ControlListHwnd | |
Transparent | |
TransColor | |
Style | ウィンドウ スタイル |
ExStyle |
指定ウィンドウのクラス名を取得できます。
WinGetClass, OutputVar [, WinTitle, WinText, ExcludeTitle, ExcludeText ]WinGetClass
取得結果はOutputVarに格納されます。マッチするウィンドウが存在しなかったときには、これは空文字列となります。
指定ウィンドウのタイトルを取得できます。なお取得できる内容は、Window Spyでのそれと同一です。
WinGetTitle, OutputVar [, WinTitle, WinText, ExcludeTitle, ExcludeText ]WinGetTitle
取得結果はOutputVarに格納されます。マッチするウィンドウが存在しなかったときには、これは空文字列となります。
WinGetTitle, title, A MsgBox, %title%
指定ウィンドウの位置とサイズを取得できます。
WinGetPos [, X, Y, Width, Height, WinTitle, WinText, ExcludeTitle, ExcludeText ]WinGetPos
取得結果はそれぞれの変数に格納されます。マッチするウィンドウが存在しなかったときには、これらは空文字列となります。
最小化されているウィンドウも位置を返します。どのような値を返すかはOSによって異なりますが、Windowsでは「-32000」となります。
指定ウィンドウの状態を変更できます。
WinSet, Attribute, Value [, WinTitle, WinText, ExcludeTitle, ExcludeText ]WinSet
何を変更するかをAttributeで、どのように変更するかをValueで指定します。
WinGetで取得できるすべての情報を、設定できるわけではありません。
Attributeの値 | 説明 |
---|---|
AlwaysOnTop | すべての他のウィンドウの最上位にとどめる (最前面する) |
Bottom | スタックの最下位にする |
Top | スタックの最上位にする。ただしアクティブにはしない |
Disable | |
Enable | |
Redraw | |
Style | ウィンドウ スタイルを変更します。
指定値の符号により挙動が異なります。
|
ExStyle | |
Region | |
Transparent | |
TransColor |
指定ウィンドウの位置とサイズ、またはいずれかを変更できます。
WinMove, X, Y
WinMove, WinTitle, WinText, X, Y [, Width, Height, ExcludeTitle, ExcludeText ]WinMove
ウィンドウの位置はスクリーン座標で指定します。
最大化されているウィンドウは、先にWinRestoreで元に戻した上でサイズを変更します。さもなくばユーザーはそのウィンドウのサイズを、通常の手段で変更できなくなってしまいます。
なお指定ウィンドウの位置とサイズは、WinGetPosで取得できます。
Windows 7以降ではWin + Shift + ←、Win + Shift + →のキーで、異なるモニタへウィンドウを移動できます。これを利用すれば
Send, #+{Right}
のようにすることで、モニタ間を移動させられます。
指定ウィンドウをアクティブにできます。最小化されているときには、元に戻してからアクティブにされます。
WinActivate [, WinTitle, WinText, ExcludeTitle, ExcludeText]WinActivate
このコマンドでは6つの方法でアクティブ化を試みます。よって通常はWinWaitActiveで待つ必要はありません。
このコマンドでアクティブにできないときは、WinTitleに条件を追加して、より具体的にウィンドウを指定します。
他のウィンドウがアクティブになった直後にウィンドウをアクティブにすると、タスクバーのボタンがフラッシュすることがあります。これを防ぐには#WinActivateForceを使用します。
逆に非アクティブにするには、次のような方法があります。
WinMinimize, A
… アクティブなウィンドウを最小化WinHide, A
… アクティブなウィンドウを非表示Send, !{ESC}
… Windowsのショートカットキーにより、アクティブなウィンドウをウィンドウ スタックの最下位に移動ウィンドウを最小化できます。
WinMinimize [, WinTitle, WinText, ExcludeTitle, ExcludeText]WinMinimize
最小化できない、もしくは最小化できてもフォーカスが残ったままになるような場合には、次のようにPostMessageでコマンドを送ります。
WM_SYSCOMMAND := 0x112 SC_MINIMIZE := 0xF020 PostMessage, WM_SYSCOMMAND, SC_MINIMIZE,,, A
最小化や最大化されているウィンドウを元に戻せます。
WinRestore [, WinTitle, WinText, ExcludeTitle, ExcludeText]WinRestore
このコマンドはウィンドウのサイズを変更するだけのため、サイズを戻したときに他のウィンドウに隠れてしまい、前面に表示されないことがあります。そのような場合には代わりにWinActivateを用いて、サイズを戻すと同時にウィンドウがアクティブになるようにします。
ウィンドウを非表示にできます。
WinHide [, WinTitle, WinText, ExcludeTitle, ExcludeText]WinHide
このコマンドで非表示にするとタスクバーにも表示されなくなるため、通知領域のアイコンから表示できるアプリケーション以外は、通常の手段で表示できなくなります。
アクティブなウィンドウを非表示にしてもフォーカスはそのウィンドウから外れず、キー入力は非表示にされたウィンドウへ送られます。
WinHideで非表示にしたウィンドウは、WinShowで表示できます。
非表示にされているウィンドウを表示できます。
WinShow [, WinTitle, WinText, ExcludeTitle, ExcludeText]WinShow
このコマンドではDetectHiddenWindowsの設定は無視されるため、非表示のウィンドウが対象外とされていても問題ありません。
このコマンドでは表示状態を変更するだけのため、ウィンドウが表示される位置によっては他のウィンドウに隠されることがあります。よって同時に、WinActivateでアクティブにするのが確実です。
WinShow, ahk_class Notepad WinActivate, ahk_class Notepad
指定ウィンドウが存在するときだけ、続く処理を実行できます。
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 [, WinTitle, WinText, ExcludeTitle, ExcludeText ]IfWinActive / IfWinNotActive / WinActive
アクティブかどうかではなくアプリケーションが起動しているかを調べるにはProcessコマンドを、アプリケーションではなくコントロールを調べるにはControlGetFocusを用います。また処理の実行ではなくホットキーの発動を制御するならば、指示命令の#IfWinActiveを用います。
指定ウィンドウが、存在するようになるまで待たせられます。
WinWait [, WinTitle, WinText, Seconds, ExcludeTitle, ExcludeText]WinWait
Secondsで、タイムアウトしてErrorLevelが1となるまでの秒数を指定します。0と指定すると0.5と解釈され、これを省略すると無期限に待ちます。このパラメータは式で指定できます。
指定ウィンドウが、アクティブになるまで待たせられます。
WinWaitActive [, WinTitle, WinText, Seconds, ExcludeTitle, ExcludeText]WinWaitActive / WinWaitNotActive
Secondsの用法はWinWaitと同じです。
ウィンドウやコントロールへメッセージを送れます。
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
コントロールを制御できます。このコマンドはウィンドウのそれとは命名規則が異なり、ControlSetという名称ではありません。
Control, Cmd [, Value, Control, WinTitle, WinText, ExcludeTitle, ExcludeText]Control
値 | |
---|---|
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, OutputVar, Cmd [, Value, Control, WinTitle, WinText, ExcludeTitle, ExcludeText ]ControlGet
ControlはClassNNまたはコントロールのテキストで指定し、テキストで指定する場合にはSetTitleMatchModeの設定で検索されます。このControlで対象を指定しなかった場合は、対象ウィンドウの最上位のコントロールが対象となります。
ControlGet, info, Style, , Edit1 MsgBox, %info%
値 | |
---|---|
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, OutputVar [, Control, WinTitle, WinText, ExcludeTitle, ExcludeText]ControlGetText
ControlGetText, controlText, Edit1, A MsgBox, %controlText%
なお、このコマンドで取得できるのはWindow Spyの[Control Under Mouse Position]のTextと同じであり、これで取得できない情報はこのコマンドでも取得できません。
コントロールのテキストを変更できます。
ControlSetText [, Control, NewText, WinTitle, WinText, ExcludeTitle, ExcludeText]ControlSetText
TextBoxなどのテキストを変更するとアプリケーションがそれを認識できず、変更前のテキストのまま処理されることがあります。
ウィンドウの指定コントロールにフォーカスを合わせられます。
ControlFocus [, Control, WinTitle, WinText, ExcludeTitle, ExcludeText ]ControlFocus
Controlは、ClassNNまたはコントロールのテキストで指定します。このパラメータを指定しなかった場合は、ウィンドウの最上位のコントロールが指定されたものとみなされます。
ControlFocus, SysTabControl321
対象ウィンドウでフォーカスを得ているコントロールを取得できます。
ControlGetFocus, OutputVar [, WinTitle, WinText, ExcludeTitle, ExcludeText ]ControlGetFocus
アクティブなウィンドウで特定のコントロール、たとえばButton1がフォーカスを得ているときに処理を実行するには、次のようにします。
ControlGetFocus, focusedControl, A if( focusedControl == "Button1" ) { ; 何らかの処理 }
フォーカスとは無関係に、マウスポインタの位置にあるコントロールはMouseGetPosで得られます。
コントロールの位置とサイズを得られます。
ControlGetPos [, X, Y, Width, Height, Control, WinTitle, WinText, ExcludeTitle, ExcludeText]ControlGetPos
一致するウィンドウやコントロールがなかったときには、出力される変数は空白となります。
指定ウィンドウのメニューバーにある項目を実行できます。
WinMenuSelectItem, WinTitle, WinText, Menu [, SubMenu1, SubMenu2, SubMenu3, SubMenu4, SubMenu5, SubMenu6, ExcludeTitle, ExcludeText ]WinMenuSelectItem
Menuでメニュー項目を、SubMenuNでそのサブメニューを指定します。メニューは、
の2つの指定方法があります。名前で指定するときは前方一致となります。よってたとえば、
WinMenuSelectItem, ahk_class Notepad, , ファイ, 開く
のように名前を省略しても機能します。表示順で指定するときは、メニューの区切り線も1つとカウントします。
最小化されていなければ、アクティブではないウィンドウも操作できます。しかしMicrosoft Outlookのような標準的ではないメニューは操作できないため、そのような場合にはSendコマンドで代用します。
WinWaitなどのコマンドの、WinTitleパラメータのマッチ方法を設定できます。
SetTitleMatchMode, MatchModeSetTitleMatchMode
値 | 説明 |
---|---|
1 | 前方一致 (指定文字列から始まるタイトルに一致) |
2 | 中間一致 (指定文字列を含むタイトルに一致) |
3 | 完全一致 (指定文字列と同一のタイトルに一致) |
RegEx | 正規表現による一致 (v1.0.45以降) |
ウィンドウを探索するときに、非表示のウィンドウも対象とするかを設定できます。
DetectHiddenWindows, On|OffDetectHiddenWindows
既定ではOffとなっています。