获取指定窗口的唯一 ID, 进程 ID(PID), 进程名或控件列表. 它还可以获取匹配指定条件的所有窗口的列表.
WinGet, OutputVar , SubCommand, WinTitle, WinText, ExcludeTitle, ExcludeText
如果这些都是空白或省略, 将使用上次找到的窗口. 否则, 为 WinTitle 指定窗口标题或其他条件, 来标识目标窗口, 和/或为 WinText 指定目标窗口的单个文本元素的子字符串(由包含的 Window Spy 实用程序显示).
ExcludeTitle 和 ExcludeText 可用于根据标题或文本排除一个或多个窗口. 它们的规范类似于 WinTitle 和 WinText, 除了 ExcludeTitle 不识别除窗口标题之外的任何条件.
窗口标题和文本是区分大小写的. 默认情况下, 不检测隐藏窗口, 而检测隐藏文本元素, 除非使用 DetectHiddenWindows 和 DetectHiddenText 进行更改. 默认情况下, 窗口标题必须以指定的 WinTitle 或 ExcludeTitle 开头才能匹配, 除非使用 SetTitleMatchMode 进行更改.
对于 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 自己则保存了获取的 ID 数量(没有则为 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 的列表. 每个 ID 是控件的窗口句柄(HWND).
除最后一项之外的每一个 ID 都以换行符(`n) 结束. 要逐项检查单个 ID, 请使用如下面示例 #3 所示的解析循环.
控件是按照 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 为 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 为 WS_EX_TOPMOST. MsgBox The window is always-on-top.
请参阅样式表了解用于样式的部分列表.
窗口的 ID 号只在窗口的生存期内有效. 换句话说, 如果重启了应用程序, 其所有的窗口都会使用新的 ID 号.
由此命令获取的 ID 号是数字的(不包含前缀 "ahk_id"), 且不论 SetFormat 如何设置都保存为十六进制格式.
当前鼠标光标下的窗口 ID 可以通过 MouseGetPos 获取.
尽管 ID 号目前是 32 位无符号整数, 但在将来的版本中它们可能会变为 64 位. 因此, 对这些值执行诸如加法之类的数值运算是不可靠的, 因为这些运算需要把输入字符串解析为有符号而不是无符号的整数.
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 }