返回匹配指定条件的窗口中的文本。
WinGetText, OutputVar [, WinTitle, WinText, ExcludeTitle, ExcludeText]
OutputVar | 输出变量,存储获取的文本。 |
WinTitle | 目标窗口的标题或标题中的部分文字(匹配模式由 SetTitleMatchMode 决定)。如果省略其它 3 个参数,默认目标是 上一次匹配窗口 。如果这个参数使用字母 A ,同时省略其它 3 个参数,则以当前激活的窗口作为目标。要用窗口的 class 名进行匹配,使用 ahk_class 精确 class 名(Window Spy 中可以显示 class 名)。要用窗口的 进程标识符(PID)进行匹配,使用 ahk_pid %PID变量% 。要用 窗口组 ,使用 ahk_group 组名 。要用窗口的 唯一 ID 进行匹配,使用 ahk_id %ID变量% 。要减小检测范围,使用 多重条件 ,例如:My File.txt ahk_class Notepad |
WinText | 如果使用这个参数,则它应该是目标窗口中某个文本元素的子字符串(在 Window Spy 中会显示出窗口中的文本元素)。隐藏文本只有在 DetectHiddenText 设置为 ON 的时候才能检测到。 |
ExcludeTitle | 标题中包含该参数指定的文字的窗口将被除外。 |
ExcludeText | 文本元素中包含该参数指定的文字的窗口将被除外。 |
如果出现错误,ErrorLevel/错误级别 设置为 1 ,否则为 0 。
一般情况下,返回的文本和 Window Spy 中显示的一样。但是,如果 DetectHiddenText 为关闭状态,则不能获取隐藏文本。
每个获取的文本元素之后都跟着一个回车和一个换行符(CR+LF),在脚本中用 `r`n 表示。要将返回值分解为单行文本或从中提取子字符串,使用 StringGetPos 和 StringMid 这样的命令。也可以使用 parsing loop 来单独检查每行文本或每个单词。
如果获取的文本不完整,尝试一下在 WinGetText 之前使用 VarSetCapacity(OutputVar, 55) (将 55 替换为大于窗口文本的大小)。有时候这是很有必要的,因为有些应用程序的窗口不会正确响应 WM_GETTEXTLENGTH 消息,导致 AutoHotkey 将输出变量设置过小,无法存储所有的窗口文本。
能够获取的文本数量取决于变量的最大容量(可以使用 #MaxMem 设置)。因此,当一个窗口包含大量文本(例如打开了一个大文档的记事本)的时候,这个命令可能会消耗大量的内存。要避免这种情况,使用 ControlGetText 来获取窗口的部分文本。在任何时候,一个变量可以通过指向空值来释放它所占用的内存,例如 OutputVar =
Windows 95/98/ME 中可能会限制窗口中的每个文本元素大小不超过 64 KB 。
要获取窗口中的控件列表,使用:WinGet, OutputVar, ControlList, WinTitle
窗口的标题和窗口中的文字是大小写敏感的。要检测隐藏窗口,必须打开 DetectHiddenWindows 。
ControlGetText, WinGetActiveStats, WinGetActiveTitle, WinGetTitle, WinGetPos, #MaxMem
Run, Calc.exe
WinWait, Calculator
WinGetText, text ; 使用上面找到的窗口
MsgBox, The text is:`n%text%