获取控件的各种类型的信息.
ControlGet, OutputVar, SubCommand , Value, ControlID, WinTitle, WinText, ExcludeTitle, ExcludeText
如果为空或省略, 则将使用目标窗口的最顶层控件. 否则, 请指定控件的 ClassNN 或文本, 或者留空并指定 ahk_id %ControlHwnd% 作为 WinTitle 参数, 以便针对该控件的 HWND 进行操作. 有关详情, 请参阅控件标识符.
如果这些都是空白或省略, 将使用上次找到的窗口. 否则, 为 WinTitle 指定窗口标题或其他条件, 来标识目标窗口, 和/或为 WinText 指定目标窗口的单个文本元素的子字符串(由包含的 Window Spy 实用程序显示).
ExcludeTitle 和 ExcludeText 可用于根据标题或文本排除一个或多个窗口. 它们的规范类似于 WinTitle 和 WinText, 除了 ExcludeTitle 不识别除窗口标题之外的任何条件.
窗口标题和文本是区分大小写的. 默认情况下, 不检测隐藏窗口, 而检测隐藏文本元素, 除非使用 DetectHiddenWindows 和 DetectHiddenText 进行更改. 默认情况下, 窗口标题必须以指定的 WinTitle 或 ExcludeTitle 开头才能匹配, 除非使用 SetTitleMatchMode 进行更改.
对于 SubCommand, 指定以下命令之一:
从列表视图, 列表框, 组合框或下拉列表中检索条目/行列表.
ControlGet, OutputVar, List , Options, ControlID, WinTitle, WinText, ExcludeTitle, ExcludeText
输出, 错误处理, Options 参数的使用方式取决于目标控件. 具体而言:
Options 参数的值将被忽略. 换句话说, 无论指定的值是什么, 控件中的所有文本都会被获取.
除最后一个项目以外的每个项目都以换行符(`n) 结束. 要逐个访问每个项目, 请使用解析循环, 如下例所示:
ControlGet, Entries, List,, ComboBox1, WinTitle
Loop, Parse, Entries, `n
MsgBox Entry number %A_Index% is %A_LoopField%.
如果 Options 为空或省略, 则获取控件中所有文本. 否则, 请在 Options 中指定零个或多个下列单词, 单词间使用空格或 tab 分隔:
除最后一行外, 每行都以换行符(`n) 结尾. 在每行中, 除最后一个列外的每个字段(列) 都以 tab 字符(`t) 结尾.
注意, 某些应用程序秘密地保存它们列表视图中的文本, 这样阻止了这些文本被获取. 在这种情况下, ErrorLevel 通常被置为 0(表示成功) 但获取的所有字段都是空的. 还有注意的是列表视图的文本是不受 #MaxMem 限制的.
如果获取成功, 则 ErrorLevel 被置为 0. 如果失败, 则它被置为 1 且 OutputVar 被置空. 引起失败的原因有: 1) 目标窗口或控件不存在; 2) 目标控件不是 SysListView32 类型; 3) 无法打开拥有列表视图的进程, 可能由于缺少用户权限或被锁定了; 4) ColN 选项指定的列不存在.
要从列表视图中逐个提取每行和每个字段, 请使用解析循环, 如下例所示:
ControlGet, SelectedRows, List, Selected, SysListView321, WinTitle
Loop, Parse, SelectedRows, `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, 0x101E, 0, 80, SysListView321, WinTitle ; 0x101E 为消息 LVM_SETCOLUMNWIDTH.
在上面的语句中, 0 表示首列(1 表示第二列, 2 表示第三列, 等等.) 此外, 80 是新宽度. 把 80 替换为 -1 来自动调整列的大小. 替换为 -2 来实现相同的功能, 并且调整标题文本的宽度.
如果选中复选框或单选按钮, 则检索 1, 如果没选中, 则检索 0.
ControlGet, OutputVar, Checked ,, ControlID, WinTitle, WinText, ExcludeTitle, ExcludeText
如果控件是启用的, 则检索 1, 或禁用控件时, 检索 0.
ControlGet, OutputVar, Enabled ,, ControlID, WinTitle, WinText, ExcludeTitle, ExcludeText
如果控件是可见的, 则检索 1, 或隐藏控件时, 检索 0.
ControlGet, OutputVar, Visible ,, ControlID, WinTitle, WinText, ExcludeTitle, ExcludeText
检索选项卡控件中激活页面的序号.
ControlGet, OutputVar, Tab ,, ControlID, WinTitle, WinText, ExcludeTitle, ExcludeText
首个页面, OutputVar 被设为 1, 第二个为 2, 依此类推.
若要获取选项卡控件中包含的页面数量, 请参照此例:
SendMessage, 0x1304,,, SysTabControl321, WinTitle ; 0x1304 为 TCM_GETITEMCOUNT. PageCount := ErrorLevel
通过字符串检索列表框, 组合框或下拉列表条目的编号.
ControlGet, OutputVar, FindString, String , ControlID, WinTitle, WinText, ExcludeTitle, ExcludeText
String 应为条目的完整文本.
对于第一个条目, OutputVar 设置为 1, 第二个为 2, 依此类推.
如果没有找到匹配, OutputVar 被置空且 ErrorLevel 被设置为 1.
检索列表框, 组合框或下拉列表中当前选择的条目的文本.
ControlGet, OutputVar, Choice ,, ControlID, WinTitle, WinText, ExcludeTitle, ExcludeText
如果没有选择条目, OutputVar 为空并且 ErrorLevel 设置为 1.
在 多选 列表框中, OutputVar 总是被设置为具有键盘焦点的输入项的文本内容. 这通常是在选择了多个输入项时最后被选中的输入项的文本.
要获取所选条目的索引, 请参照此例(只需使用下面开始两行中的其中一行, 例如, 对于列表框使用 LB_GETCURSEL, 或者对于组合框或下拉列表使用 CB_GETCURSEL):
SendMessage, 0x0188, 0, 0, ListBox1, WinTitle ; 0x0188 为 LB_GETCURSEL. SendMessage, 0x0147, 0, 0, ComboBox1, WinTitle ; 0x0147 为 CB_GETCURSEL. ; 如果没有选中的条目, UInt 转换为 Int 时须 -1, ; 从基于 0 转换到基于 1, 这样首个条目被称为 1, 而不是 0: ChoiceIndex := (ErrorLevel<<32>>32) + 1
获取编辑控件中的行数.
ControlGet, OutputVar, LineCount ,, ControlID, WinTitle, WinText, ExcludeTitle, ExcludeText
OutputVar 被设置为 1 表示总共有一行, 2 表示有两行, 以此类推.
所有的编辑控件至少含有一行, 即使控件是空的.
检索插入符号(插入点) 所在的编辑控件中的行号.
ControlGet, OutputVar, CurrentLine ,, ControlID, WinTitle, WinText, ExcludeTitle, ExcludeText
OutputVar 被设置为 1 表示第一行, 2 表示第一行, 以此类推.
如果在控件中选择了文本, 则 OutputVar 被设置为选区开始处所在的行号.
检索插入符号(文本插入点) 所在的编辑控件中的列号.
ControlGet, OutputVar, CurrentCol ,, ControlID, WinTitle, WinText, ExcludeTitle, ExcludeText
OutputVar 被设置为 1 表示第一列, 2 表示第二列, 以此类推.
如果控件中选中了文本, 则 OutputVar 将被设置为该选中内容起始所在的列号.
检索编辑控件中行 N 的文本.
ControlGet, OutputVar, Line, N , ControlID, WinTitle, WinText, ExcludeTitle, ExcludeText
N 应该是行号. 首行为 1, 第二行为 2, 以此类推.
If N does not exist, OutputVar 被置空且 ErrorLevel 被设置为 1.
根据控件的性质, OutputVar 可能以回车符(`r) 或换车和换行符(`r`n) 结束.
检索在编辑控件中所选文本.
ControlGet, OutputVar, Selected ,, ControlID, WinTitle, WinText, ExcludeTitle, ExcludeText
如果没有选择文本, OutputVar 会被置空且 ErrorLevel 被设置为 0(即没有错误).
某些类型的控件, 例如 RichEdit20A, 在某些情况下可能无法获取到正确的文本(例如 Metapad).
检索表示控件样式的 8 位十六进制数字.
ControlGet, OutputVar, Style ,, ControlID, WinTitle, WinText, ExcludeTitle, ExcludeText
对于一些样式的列表, 请参阅样式表.
检索表示控件扩展样式的 8 位十六进制数字.
ControlGet, OutputVar, ExStyle ,, ControlID, WinTitle, WinText, ExcludeTitle, ExcludeText
对于一些样式的列表, 请参阅样式表.
检索控件的窗口句柄(HWND).
ControlGet, OutputVar, Hwnd ,, ControlID, WinTitle, WinText, ExcludeTitle, ExcludeText
[v1.1.04+]: 此命令失败时会抛出异常. 想了解更多信息, 请参阅运行时错误.
成功时, ErrorLevel 被置为 0. 如果遇到问题, 例如窗口或控件不存在, 则 ErrorLevel 被置为 1 且 OutputVar 被置空.
此命令适用于非图形用户界面窗口中的控件, 即那些不是通过 Gui 命令创建的窗口. 它与常见的或预定义的微软控件配合使用效果最佳; 有些应用程序使用自定义或修改后的控件, 在这种情况下, 该命令可能无法按预期运行. 对于 GUI 控件, 通常更方便的做法是使用 GuiControlGet, 前提是存在相应的对应功能.
和其他改变控件的命令不同, ControlGet 后没有自动的延时; 即, SetControlDelay 不会影响它.
要获取鼠标当前悬停的控件的 ClassNN 或 HWND, 请使用 MouseGetPos. 要获取窗口中所有控件列表, 请使用 WinGet ControlList.
Control, GuiControlGet, ControlMove, ControlGetText, ControlSetText, ControlGetPos, ControlClick, ControlFocus, ControlSend, WinGet
报告图形用户界面(GUI) 或非图形用户界面窗口中第一个选项卡控件所对应活动页面的索引.
ControlGet, WhichTab, Tab, , SysTabControl321, Some Window Title
if ErrorLevel
MsgBox There was a problem.
else
MsgBox Tab #%WhichTab% is active.
获取图形用户界面(GUI) 或非图形用户界面窗口中第一个编辑控件的窗口句柄(HWND).
ControlGet, OutputVar, Hwnd,, Edit1, Some Window Title