获取控件的各种类型的信息。
ControlGet, OutputVar, Cmd [, Value, Control, WinTitle, WinText, ExcludeTitle, ExcludeText]
用来保存 Cmd 结果的变量名.
可以是 ClassNN(控件的类名和实例编号)或控件的文本,它们都可以通过 Window Spy 获取。使用文本时,匹配行为由 SetTitleMatchMode 决定。如果此参数为空, 则使用目标窗口的顶层控件.
要对控件的 HWND(窗口句柄)进行操作,请将 Control 参数留空同时在 WinTitle 参数中指定 ahk_id %ControlHwnd%
(即使在 DetectHiddenWindows 设置关闭时,这样也可以操作隐藏控件)。获取控件的 HWND 的一般方法是使用 ControlGet Hwnd, MouseGetPos 或 DllCall.
窗口标题或识别目标窗口的其他条件。请参阅 WinTitle。
如果使用此参数, 那么它必须是目标窗口中单个文本元素的子字符串 (和内置的 Window Spy 工具显示的一样). 当 DetectHiddenText 的设置为 ON 时, 那么会检测到隐藏文本元素.
标题中含有此参数值的窗口将被排除.
文本中含有此参数值的窗口将被排除.
Cmd 和 Value 参数互相依赖, 它们的用法描述如下.
List: 从列表视图, 列表框, 组合框或下拉列表中获取条目列表.
ListView:从列表视图中获取条目列表的方法是:
ControlGet, OutputVar, List, Options, SysListView321, WinTitle, WinText
如果 Options 为空或省略, 则获取控件中所有文本. 除最后一行外的其他行都以换行符 (`n) 结尾. 在每行中, 除最后一个字段外的其他字段 (列) 都以 tab 字符 (`t) 结尾.
在 Options 指定零个或多个下列单词, 单词间使用空格或 tab 分隔:
Selected: 仅获取选择 (高亮) 行而不是所有行. 如果没有, 则 OutputVar 被置空.
Focused: 仅获取焦点行. 如果没有, 则 OutputVar 被置空.
Col4: 仅获取第四列 (字段) 而不是所有列 (把 4 替换为您选择的数字).
Count: 获取控件中总行数 (单个数字表示).
Count Selected: 获取选择 (高亮) 的行数.
Count Focused: 获取焦点行的行号 (位置) (如果没有焦点行则为 0).
Count Col: 获取控件的列数 (如果列的总是无法确定则为 -1).
注意: 某些应用程序秘密地保存它们列表视图中的文本, 这样阻止了这些文本被获取. 在这种情况下, ErrorLevel 通常被置为 0 (表示成功) 但获取的所有字段都是空的. 还有注意的是列表视图的文本是不受 #MaxMem 限制的.
如果获取成功, 则 ErrorLevel 被置为 0. 如果失败, 则它被置为 1 且 OutputVar 被置空. 引起失败的原因有:1) 目标窗口或控件不存在;2) 目标控件不是 SysListView32 类型;3) 无法打开拥有列表视图的进程,可能由于缺少用户权限或被锁定了;4) ColNN option 指定的列不存在。
要从列表视图中逐个提取每行和每个字段, 请使用 解析循环, 例如:
ControlGet, List, List, Selected, SysListView321, WinTitle Loop, Parse, List, `n ; 行之间由换行符 (`n) 分隔. { RowNumber := A_Index Loop, Parse, A_LoopField, %A_Tab% ; 每行中的字段 (列) 之间由 tab (A_Tab) 分隔. MsgBox Row #%RowNumber% Col #%A_Index% is %A_LoopField%. }
相关提示, 列表视图中的列可以使用 SendMessage 来调整大小, 如下所示:
SendMessage, 4126, 0, 80, SysListView321, WinTitle ; 4126 为消息 LVM_SETCOLUMNWIDTH. ; 在上面的语句中, 0 表示首列 (1 表示第二列, 2 表示第三列, 等等.) 此外, 80 是新宽度. ; 把 80 替换为 -1 来自动调整列的大小. 替换为 -2 来实现相同的功能, 并且调整标题文本的宽度.
ListBox、ComboBox、DropDownList:获取控件中所有的文本(即不支持上面的列表视图选项,例如Count和Selected)。
除最后一行外的其他行都以换行符 (`n) 结束. 要逐个访问每个项目, 请使用 解析循环, 例如:
ControlGet, List, List,, ComboBox1, WinTitle Loop, Parse, List, `n MsgBox Item number %A_Index% is %A_LoopField%.
Checked: 如果复选框或单选框被选中, 则设置 OutputVar 为 1; 否则为 0.
Enabled: 如果 Control 处于启用状态, 则设置 OutputVar 为 1; 禁用则为 0.
Visible: 如果 Control 是可见的, 则设置 OutputVar 为 1; 否则为 0.
Tab: 设置 OutputVar 为 SysTabControl32 控件的选项卡编号. 首个选项卡为 1, 第二个为 2, 等等. 要获取选项卡控件中含有的选项卡 (页) 数目, 请参照此例:
SendMessage, 0x1304,,, SysTabControl321, WinTitle ; 0x1304 为 TCM_GETITEMCOUNT. TabCount = %ErrorLevel%
FindString, String: 设置 OutputVar 为列表框或组合框中准确匹配 String 的条目编号. 控件中首个条目为 1, 第二个为 2, 依此类推. 如果没有找到匹配, 则 OutputVar 被置空且 ErrorLevel 被设置为 1.
Choice:设置OutputVar列表框或组合框中当前选择的条目名称。要获取所选条目的位置, 请参照此例 (只需使用下面开始两行中的其中一行):
SendMessage, 0x188, 0, 0, ListBox1, WinTitle ; 0x188 为 LB_GETCURSEL (对于列表框). SendMessage, 0x147, 0, 0, ComboBox1, WinTitle ; 0x147 为 CB_GETCURSEL (对于下拉列表或组合框). ChoicePos = %ErrorLevel% ; 如果没有选中的条目, 那么它会为 -1. ChoicePos += 1 ; 从基于 0 转换到基于 1, 这样首个条目被称为 1, 而不是 0.
LineCount: 设置 OutputVar 为编辑控件中的行数. 所有的编辑控件至少含有一行, 即使控件是空的.
CurrentLine: 设置 OutputVar 为编辑控件光标处 (插入点) 所在的行号. 首行为 1. 如果控件中选择了文本, 则 OutputVar 被设置为选区开始处所在的行号.
CurrentCol: 设置 OutputVar 为编辑控件光标处 (文本插入点) 所在的列号. 首列为 1. 如果控件中选择了文本, 则 OutputVar 被设置为选区开始处所在的列号.
Line, N: 设置 OutputVar 为编辑控件中行 N 的文本. 行 1 为首行. 根据控件的性质, OutputVar 可能以回车符 (`r) 或换车和换行符 (`r`n) 结束. 如果指定的行号没有内容或不存在, 则 ErrorLevel 被置为 1 且 OutputVar 被置空.
Selected: 设置 OutputVar 为编辑控件中选择的文本. 如果没有选择的文本, 则 OutputVar 会被置空且 ErrorLevel 被设置为 0 (即没有错误). 某些类型的控件, 例如 RichEdit20A, 在某些情况下可能无法获取到正确的文本 (例如 Metapad).
Style: 获取表示控件样式的 8 位十六进制数. 请参阅样式表了解一些样式。
ExStyle: 获取表示控件扩展样式的 8 位十六进制数.
Hwnd [v1.0.43.06+]: 获取指定控件的窗口句柄 (HWND). 例如:ControlGet, OutputVar, Hwnd,, Edit1, WinTitle
。控件的 HWND 常用于 PostMessage, SendMessage 和 DllCall. 相关提示, 还可以使用 MouseGetPos 获取控件的 HWND. 最后, 控件的 HWND 可以直接用在 ahk_id WinTitle 中 (即使 DetectHiddenWindows 设置关闭时, 这样对于隐藏控件也是有效的).
[v1.1.04+] 此命令失败时会抛出异常. 想了解更多信息, 请参阅 运行时错误.
成功时, ErrorLevel 被置为 0. 如果遇到问题, 例如窗口或控件不存在, 则 ErrorLevel 被置为 1 且 OutputVar 被置空.
和其他改变控件的命令不同, ControlGet 后没有自动的延时; 即, SetControlDelay 不会影响它.
要获取鼠标当前悬停的控件的 ClassNN 或 HWND,请使用 MouseGetPos。要获取窗口中控件列表, 请使用 WinGet ControlList.
窗口标题和文本是区分大小写的. 只有在打开 DetectHiddenWindows 设置时,才能检测到隐藏窗口。
Control, GuiControlGet, ControlMove, ControlGetText, ControlSetText, ControlGetPos, ControlClick, ControlFocus, ControlSend, WinGet
ControlGet, OutputVar, Line, 1, Edit1, Some Window Title ControlGet, WhichTab, Tab, , SysTabControl321, Some Window Title if ErrorLevel MsgBox There was a problem. else MsgBox Tab #%WhichTab% is active.