获取指定窗口的唯一 ID, 进程 ID(PID), 进程名或控件列表. 它还可以获取匹配指定条件的所有窗口的列表.
WinGet, OutputVar , SubCommand, WinTitle, WinText, ExcludeTitle, ExcludeText
对于 SubCommand, 指定以下命令之一:
获取窗口的唯一 ID 号.
WinGet, OutputVar, ID , WinTitle, WinText, ExcludeTitle, ExcludeText
也称为窗口句柄(HWND). 如果没有匹配窗口, 那么 OutputVar 被置空. 使用 WinExist() 和 WinActive() 函数也可以获取窗口的 ID; 例如, WinExist("A")
能快速获取活动窗口 ID. 要找出控件的 HWND(用于 Post/SendMessage 或 DllCall), 请使用 ControlGet Hwnd 或 MouseGetPos.
如果找到多个匹配窗口, 它会获取最后的/最下面的窗口唯一 ID.
WinGet, OutputVar, IDLast , WinTitle, WinText, ExcludeTitle, ExcludeText
也称为窗口句柄(HWND). 如果没有匹配的窗口, 则 OutputVar 被置空. 如果只有一个匹配, 那么它的效果与 ID 子命令相同. 这种特性类似于 WinActivateBottom.
获取窗口的进程 ID.
WinGet, OutputVar, PID , WinTitle, WinText, ExcludeTitle, ExcludeText
如果没有匹配的窗口, 则 OutputVar 被置空.
获取拥有窗口的进程名.
WinGet, OutputVar, ProcessName , WinTitle, WinText, ExcludeTitle, ExcludeText
例如, 可能是 "notepad.exe". 如果没有匹配窗口, 那么 OutputVar 被置空.
获取拥有窗口的进程的完整路径和名称.
WinGet, OutputVar, ProcessPath , WinTitle, WinText, ExcludeTitle, ExcludeText
例如, 可能是 "C:\Windows\System32\notepad.exe". 如果没有匹配窗口, 那么 OutputVar 被置空.
获取与标题/文本参数匹配的现有窗口的数量.
WinGet, OutputVar, Count , WinTitle, WinText, ExcludeTitle, ExcludeText
如果没有匹配窗口, OutputVar 设为 0. 要统计整个系统的所有窗口数, 请省略所有的四个标题/文本参数. 只有在打开 DetectHiddenWindows 设置时才会包括隐藏窗口.
与标题/文本参数相匹配的所有现有窗口的唯一 ID 号.
WinGet, OutputVar, List , WinTitle, WinText, ExcludeTitle, ExcludeText
要获取整个系统的所有窗口, 省略所有的四个标题/文本参数. 每个 ID 号保存在名称以 OutputVar 自己的名字开头的变量中(构成一个伪数组), 而 OutputVar 自己则保存了获取的项目数量(没有则为 0). 例如, 如果 OutputVar 是 MyArray 且找到两个匹配的窗口, 那么 MyArray1 会被设置为首个窗口的 ID, MyArray2 被设置为第二个窗口的 ID 时, MyArray 自身被设置为数字 2. 窗口获取的顺序是从最上面到最下面(根据它们在桌面上的堆放顺序). 只有在打开 DetectHiddenWindows 设置时才会包括隐藏窗口. 在函数中, 要创建全局而不是局部的伪数组, 必须在使用此命令前声明 MyArray 为全局变量(对于假设全局函数, 反之亦然). 但是, 通常需要对每一个变量进行声明, 否则可能引起混乱的根源.
获取窗口的最小化/最大化状态.
WinGet, OutputVar, MinMax , WinTitle, WinText, ExcludeTitle, ExcludeText
如果不存在匹配窗口, 则 OutputVar 被置空; 否则, 它被设置为下列数字的其中一个:
获取窗口中每个控件的控件名.
WinGet, OutputVar, ControlList , WinTitle, WinText, ExcludeTitle, ExcludeText
如果没有匹配窗口或窗口中没有控件, 那么 OutputVar 被置空. 否则, 每个控件的名称都包含其类名, 紧接着序号(ClassNN), 如同 Window Spy 显示的那样.
除最后一项外的其他项以换行符结束(`n). 要逐个检查每个控件的名称, 请使用解析循环, 如同下面的示例 #3.
控件是按照 Z 轴顺序排序的, 如果窗口支持选项卡, Z 轴顺序通常与使用 Tab 的导航顺序相同.
获取窗口中每个控件的唯一 ID 号.
WinGet, OutputVar, ControlListHwnd , WinTitle, WinText, ExcludeTitle, ExcludeText
如果没有匹配窗口或窗口中没有控件, 那么 OutputVar 被置空. 否则, 每个唯一 ID 都是控件的窗口句柄(HWND). 除最后一项之外的每一项以换行符(`n) 结束.
控件是按照 Z 轴顺序排序的, 如果窗口支持选项卡, Z 轴顺序通常与使用 Tab 的导航顺序相同.
获取窗口的透明度的等级.
WinGet, OutputVar, Transparent , WinTitle, WinText, ExcludeTitle, ExcludeText
请参阅 WinSet 了解如何设置透明度. 出现后面这些情况时, OutputVar 被置空: 1) 操作系统低于 Windows XP; 2) 没有匹配窗口; 3) 窗口没有设置透明度等级; 或 4) 其他情况(由操作系统行为引起), 例如设置透明后窗口被最小化, 还原和/或重设大小. 否则, 将存储一个介于 0 和 255 之间的数字, 这里 0 示完全透明的窗口, 而 255 表示不透明的窗口. 例如:
MouseGetPos,,, MouseWin WinGet, Transparent, Transparent, ahk_id %MouseWin% ; 透明鼠标光标下的窗口.
获取在窗口中标记为透明的颜色.
WinGet, OutputVar, TransColor , WinTitle, WinText, ExcludeTitle, ExcludeText
请参阅 WinSet 了解如何设置 TransColor. 出现后面这些情况时, OutputVar 被置空: 1) 操作系统低于 Windows XP; 2) 没有匹配窗口; 3) 窗口没有透明色; 或 4) 其他情况(由操作系统行为引起), 例如设置透明后窗口被最小化, 还原和/或重设大小. 否则, 将存储一个六位的十六进制 RGB 颜色值, 例如 0x00CC99. 例如:
MouseGetPos,,, MouseWin WinGet, TransColor, TransColor, ahk_id %MouseWin% ; 鼠标光标下的窗口透明色.
获取表示窗口样式的 8 位十六进制数字.
WinGet, OutputVar, Style , WinTitle, WinText, ExcludeTitle, ExcludeText
如果没有匹配窗口, 那么 OutputVar 被置空. 下面的例子判断窗口是否含有 WS_DISABLED 样式:
WinGet, Style, Style, My Window Title if (Style & 0x8000000) ; 0x8000000 is WS_DISABLED. MsgBox The window is disabled.
请参阅样式表了解用于样式的部分列表.
获取表示窗口扩展样式的 8 位十六进制数字.
WinGet, OutputVar, ExStyle , WinTitle, WinText, ExcludeTitle, ExcludeText
如果没有匹配窗口, 那么 OutputVar 被置空. 下面的例子判断窗口是否含有 WS_EX_TOPMOST 样式(置顶):
WinGet, ExStyle, ExStyle, My Window Title if (ExStyle & 0x8) ; 0x8 is WS_EX_TOPMOST. MsgBox The window is always-on-top.
请参阅样式表了解用于样式的部分列表.
窗口的 ID 号只在窗口的生存期内有效. 换句话说, 如果重启了应用程序, 其所有的窗口都会使用新的 ID 号.
由此命令获取的 ID 号是数字的(不包含前缀 "ahk_id"), 且不论 SetFormat 如何设置都保存为十六进制格式.
当前鼠标光标下的窗口 ID 可以通过 MouseGetPos 获取.
尽管 ID 号目前是 32 位无符号整数, 但在将来的版本中它们可能会变为 64 位. 因此, 对这些值执行诸如加法之类的数值运算是不可靠的, 因为这些运算需要把输入字符串解析为有符号而不是无符号的整数.
窗口标题和文本是区分大小写的. 只有在打开 DetectHiddenWindows 设置时, 才能检测到隐藏窗口.
WinGetClass, Process, WinGetTitle, MouseGetPos, ControlGet, ControlFocus, GroupAdd
WinGet, active_id, ID, A WinMaximize, ahk_id %active_id% MsgBox, The active window's ID is "%active_id%".
WinGet, id, List,,, Program Manager Loop, %id% { this_id := id%A_Index% WinActivate, ahk_id %this_id% WinGetClass, this_class, ahk_id %this_id% WinGetTitle, this_title, ahk_id %this_id% MsgBox, 4, , Visiting All Windows`n%A_Index% of %id%`nahk_id %this_id%`nahk_class %this_class%`n%this_title%`n`nContinue? IfMsgBox, NO, break }
WinGet, ActiveControlList, ControlList, A Loop, Parse, ActiveControlList, `n { MsgBox, 4,, Control #%A_Index% is "%A_LoopField%". Continue? IfMsgBox, No break }