💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
## **描述** 和GetWindowByTitle函数功能类似,不过功能相比要强大很多,支持很多功能,比如标题内容支持模糊匹配,甚至支持正则方式匹配。还可以结合pid控制窗口,以及搜集同类名的所有窗口句柄。 ## **语法** GetWindowByTitleEx(*strTitle[, intWaitSeconds = 10[, hWndAll[, isUseRegExp = False[, checkPid[, windowVisible = AllWindow]]]]]*) **该语法中有下列命名参数:** | 参数 | 描述 | | --- | --- | | strTitle | 必须的。String类型,表示要查找的窗口的标题文字,可以只写一部分,不过为了窗口查找准确建议还是写完整的标题文字,如果要对此参数进行正则控制可将第4个参数isUseRegExp设置为True。 | | intWaitSeconds | 可选的。Long 类型,表示等待超时时间。如果忽略,缺省值是 10,它表明最多等待10秒钟 | | hWndAll| 可选的。String类型。注意,此函数是byRef(传地址)方式,由外部传入一个变量,函数得到的所有句柄都将存到这个变量中。 | | isUseRegExp| 可选的。Boolean类型,表示是否使用正则匹配模式。如果忽略,缺省值是False。 | | checkPid | 可选的。String 类型,表示要获取的窗口的pid是多少。如果忽略,缺省值是空,表示不检查checkPid值。 | | windowVisible | 可选的。enumWindowVisible类型,表示指定所需要获得的窗口可见属性。如果忽略,缺省值是 AllWindow,它表明不管什么状态(可见&不可见)的窗口都获取。关于enumWindowVisible类型的介绍请参考下面“**enumWindowVisible类型的设置值**”表的介绍。 | **enumWindowVisible类型的设置值:** | 设置 | 描述 | | --- | --- | | HiddenWindow | 隐藏的窗口 | | DisplayedWindow | 显示的窗口 | | AllWindow| 以上两种窗口都包含 | ## **返回值** | clsWindow | | --- | | 返回值为本身,方便连写 | ## **示例** > **示例1** 说明:根据窗口关键字模糊“计算”获得计算器窗口。建议先打开计算器然后获得执行下面代码。 ``` Dim w As New clsWindow If w.GetWindowByTitleEx("计算").hWnd <> 0 Then MsgBox "计算器窗口获取成功!它的句柄为:" & w.hWnd, vbInformation w.Caption = "获取成功 " & Time '改变计算器的标题 Else MsgBox "超时10秒。未发现包含“计算”二字的窗口标题", vbExclamation End If ``` > **示例2** 说明:如果当前有多个启动的计算器,我们自己程序用shell函数再启动一个计算器,那么怎样获得被我们启动的这个计算器的窗口呢?通过上述示例1显然无法获得,因为每个启动着的计算器窗口都是“计算器”,这时我们可以通过checkPid来校验,做进一步筛选,因为shell函数会返回pid的。请打开几个计算器后测试下面代码。 ``` Dim w As New clsWindow Dim lngPid As Long lngPid = Shell("calc", 1) If w.GetWindowByTitleEx("计算", , , , lngPid).hWnd <> 0 Then MsgBox "计算器窗口获取成功!它的句柄为:" & w.hWnd, vbInformation w.Caption = "获取成功 " & Time '改变计算器的标题 End If ``` > **示例3** 说明:怎样获得所有符合条件的窗口句柄,然后逐一操作?下面代码将会获取所有记事本窗口并逐一关闭,测试前请多打开几个记事本文件。 ``` Dim w As New clsWindow Dim strHwndAll As String Dim i As Integer, v w.GetWindowByTitleEx "记事本", , strHwndAll MsgBox "已获取所有记事本的句柄:" & strHwndAll, vbInformation v = Split(strHwndAll, " ") For i = 0 To UBound(v) w.hWnd = v(i) MsgBox "将关闭标题为“" & w.Caption & "”的记事本", vbInformation w.CloseWindow Next MsgBox "所有记事本窗口已被关闭!", vbInformation ``` > **示例4** 说明:使用正则模糊匹配标题。下面代码将演示当前系统中标题包含数字的窗口。不用打开什么程序,直接运行下面代码即可 ``` Dim w As New clsWindow Dim strHwndAll As String Dim i As Integer, v, s As String w.GetWindowByTitleEx "\d+", , strHwndAll, True v = Split(strHwndAll, " ") MsgBox "系统当前标题含有数字的窗口共有" & UBound(v) + 1 & "个,它们的句柄为:" & strHwndAll, vbInformation For i = 0 To UBound(v) s = s & v(i) & " 标题:" & w.GetWindowByHwnd(v(i)).Caption & vbCrLf Next MsgBox s ``` > **示例5** 说明:阻止系统自带的小游戏启动,运行程序后尝试打开“扫雷”、“纸牌”等游戏看看。代码用了正则匹配,只要包含下面关键字的窗口都会被关闭。 ``` Dim w As New clsWindow Do If w.GetWindowByTitleEx("蜘蛛|纸牌|空当接龙|扫雷|红心大战|三维弹球", 10, , True).hWnd <> 0 Then w.CloseWindow '关闭窗口 End If w.Wait 100 '每100ms检测一次 Loop ```