# WinGetText

返回匹配指定条件的窗口中的文本。

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

如果出现错误，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%