<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-1632085368384154" crossorigin="anonymous"></script><script src="https://autohotkey.top/gtag.js"></script></head> <body> <h1>StatusBarWait</h1> <p>等待, 直到窗口的状态栏包含指定的字符串.</p> <pre class="Syntax"><span class="func">StatusBarWait</span> <span class="optional">BarText, Timeout, Part#, WinTitle, WinText, Interval, ExcludeTitle, ExcludeText</span></pre> <h2 id="Parameters">参数</h2> <dl> <dt>BarText</dt> <dd> <p>类型: <a href="../Concepts.htm#strings">字符串</a></p> <p>如果未设置或省略, 函数等待状态栏变成空白. 否则, 请指定函数所等待的文本或部分文本. 此文本是区分大小写的, 且匹配行为由 <a href="SetTitleMatchMode.htm">SetTitleMatchMode</a> 决定, 类似于下面的 <em>WinTitle</em>.</p> <p>若要等待状态栏是否发生了 <em>改变</em>, 可以在循环中使用 <a href="StatusBarGetText.htm">StatusBarGetText</a>, 或像本页底部的例子那样使用 RegEx.</p> </dd> <dt>Timeout</dt> <dd> <p>类型: <a href="../Concepts.htm#numbers">整数</a>或<a href="../Concepts.htm#numbers">浮点数</a></p> <p>如果未设置或省略, 函数将会无限期等待. 否则, 请指定在超时前等待的秒数(可以是小数), 在这种情况下返回 0(false).</p> </dd> <dt>Part#</dt> <dd> <p>类型: <a href="../Concepts.htm#numbers">整数</a></p> <p>如果未设置或省略, 默认为 1, 这部分通常包含了我们感兴趣的文本. 否则, 请指定要获取的状态栏那一部分的编号.</p> </dd> <dt>WinTitle, WinText, ExcludeTitle, ExcludeText</dt> <dd> <p>类型: <a href="../Concepts.htm#strings">字符串</a>, <a href="../Concepts.htm#numbers">整数</a>或<a href="../Objects.htm">对象</a></p> <p>如果这些都未设置或省略, 将使用<a href="../misc/WinTitle.htm#LastFoundWindow">上次找到的窗口</a>. 否则, 为 <em>WinTitle</em> 指定<a href="../misc/WinTitle.htm">窗口标题或其他条件</a>, 来标识目标窗口, 和/或为 <em>WinText</em> 指定目标窗口的单个文本元素的子字符串(由包含的 Window Spy 实用程序显示). 如果 <a href="DetectHiddenText.htm">DetectHiddenText</a> 已经打开, 则检测隐藏文本元素. 标题或文本包含 <em>ExcludeTitle</em> 或 <em>ExcludeText</em> 的窗口将不被考虑.</p> </dd> <dt>Interval</dt> <dd> <p>类型: <a href="../Concepts.htm#numbers">整数</a></p> <p>如果未设置或省略, 默认为 50. 否则, 请指定此函数在等待时对状态栏进行检查的时间间隔(单位为毫秒).</p> </dd> </dl> <h2 id="Return_Value">返回值</h2> <p>类型: <a href="../Concepts.htm#boolean">整数(布尔值)</a></p> <p>如果找到匹配, 该函数返回 1(true), 如果函数超时, 则返回 0(false).</p> <h2 id="Error_Handling">错误处理</h2> <p>在以下任何一种情况下, 都会抛出异常:</p> <ul> <li><a href="Error.htm#TargetError">TargetError</a>: 找不到目标窗口或不包含标准状态栏.</li> <li><a href="Error.htm#OSError">OSError</a>: 在发送 SB_GETPARTS 消息时出现了问题, 或者在 2000&nbsp;ms 内没有收到回复.</li> <li><a href="Error.htm#OSError">OSError</a>: 在拥有状态栏的进程中无法分配内存.</li> </ul> <h2 id="Remarks">备注</h2> <p>该函数尝试读取窗口中首个 <em>标准</em> 状态栏(Microsoft 通用控件: msctls_statusbar32). 某些程序使用它们自己的状态栏或微软通用控件的特殊版本. 不支持这样的状态栏.</p> <p>在大多数时候, 与其在循环中使用 <a href="StatusBarGetText.htm">StatusBarGetText</a>, 不如使用 StatusBarWait 来得有效率, 因为它避免重复调用 <a href="StatusBarGetText.htm">StatusBarGetText</a> 所带来的开销.</p> <p>StatusBarWait 在开始等待匹配前会确定它的目标窗口. 如果那个目标窗口关闭了, 那么此命令会停止等待, 即使存在另一个匹配指定 <em>WinTitle</em> 和 <em>WinText</em> 的窗口.</p> <p>当函数处于等待状态时, 可以通过<a href="../Hotkeys.htm">热键</a>, <a href="Menu.htm">自定义菜单项</a>或<a href="SetTimer.htm">计时器</a>启动新的<a href="../misc/Threads.htm">线程</a>.</p> <p>窗口标题和文本是区分大小写的. 除非 <a href="DetectHiddenWindows.htm">DetectHiddenWindows</a> 被打开, 否则不会检测隐藏窗口.</p> <h2 id="Related">相关</h2> <p><a href="StatusBarGetText.htm">StatusBarGetText</a>, <a href="WinGetTitle.htm">WinGetTitle</a>, <a href="WinGetText.htm">WinGetText</a>, <a href="ControlGetText.htm">ControlGetText</a></p> <h2 id="Examples">示例</h2> <div class="ex" id="ExSearch"> <p><a class="ex_number" href="#ExSearch"></a> 在现有的资源管理器/搜索窗口中输入新的搜索模式.</p> <pre>if WinExist("Search Results") <em>; 设置上次找到的窗口以简化后面的代码.</em> { WinActivate Send "{tab 2}!o*.txt{enter}" <em>; 在搜索窗口中, 输入要搜索的模式.</em> Sleep 400 <em>; 给状态栏时间, 等它改变为 "Searching".</em> if StatusBarWait("found", 30) MsgBox "The search successfully completed." else MsgBox "The function timed out." }</pre> </div> <div class="ex" id="ExChange"> <p><a class="ex_number" href="#ExChange"></a> 等待活动窗口的状态栏发生变化.</p> <pre>SetTitleMatchMode "RegEx" <em>; 接受<a href="SetTitleMatchMode.htm#RegEx">正则表达式</a>, 以便在下面使用.</em> if WinExist("A") <em>; 设置上次找到的窗口为活动窗口(供下面使用).</em> { OrigText := StatusBarGetText() StatusBarWait "^(?!^\Q" OrigText "\E$)" <em>; 该正则表达式等待文本发生任何变化.</em> }</pre> </div> <a href="https://dftg.net">dftg</a></body> </html>