## **描述**
和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
```
- 关于clsWindow
- 一、获取窗口
- GetWindowByTitle 函数
- GetWindowByTitleEx 函数
- GetWindowByClassName 函数
- GetWindowByClassNameEx 函数
- GetWindowByPoint 函数
- GetWindowByAppName 函数
- GetWindowByAppNameEx 函数
- GetWindowByCursorPos 函数
- GetWindowByPID 函数
- GetWindowByHwnd 函数
- Load 函数(同GetWindowByHwnd)
- 二、操作窗口
- Focus 方法
- SetFocus 方法(同Focus)
- FadeIn 方法
- FadeOut 方法
- Transparent 函数
- SetTransparent 函数(同Transparent)
- MakeTransparent 函数(同Transparent)
- Shake 方法
- CloseWindow 函数
- ClassName 属性
- Caption 属性
- Text 属性(同Caption)
- Title 属性(同Caption)
- Value 属性(同Caption)
- ZOrder 方法
- Left 属性
- Top 属性
- Width 属性
- Height 属性
- Visible 属性
- Enabled 属性
- WindowState 属性
- AlphaBlend 属性
- TransparentColor 属性
- CheckWindow 函数
- Move 函数
- MoveToCenter 函数
- Show 函数
- Hide 函数
- Refresh 方法
- SetPosBottom 函数
- SetPosFront 函数
- SetPosNormal 函数
- SetTop 函数
- IsTopMost 函数
- IsForegroundWindow 属性
- Maximized 函数
- Minimized 函数
- Normal 函数
- Restore 函数(同Normal)
- 三、操作控件
- GetElementHwndByText 函数
- GetElementHwndByClassName 函数
- GetElementTextByText 函数
- GetElementTextByClassName 函数
- GetClassNameByHwnd 函数
- GetTextByHwnd 函数
- GetCaptionByHwnd 函数(同GetTextByHwnd)
- SetElementTextByText 函数
- SetElementTextByClassName 函数
- SelectComboBoxIndex 函数
- AppendElementTextByClassName 函数
- Click 函数
- ClickElementByText 函数
- ClickElementByClassName 函数
- SendKeys 方法
- Paste 方法
- FileToClipboard 函数
- ClipboardSetText 函数
- 四、鼠标坐标相关
- ClickCurrentPoint 方法
- ClickPoint 方法
- ClickPointBackground 方法
- SetCursor 方法
- MoveCursor 方法(同SetCursor)
- MoveCursorTo 方法(同SetCursor)
- SetPoint 方法(同SetCursor)
- GetCursorPoint 函数
- GetCursorPosCurrent 函数(同GetCursorPoint)
- MouseLeftDown 方法
- MouseLeftUp 方法
- MouseRightDown 方法
- MouseRightUp 方法
- DragTo 方法
- DragToEx 方法
- 五、应用程序相关
- AppPath 函数
- AppName 函数
- IsWin64 函数
- CommandLine 函数
- AppCommandLine 函数(同CommandLine)
- CloseApp 函数
- ProcessID 函数
- PID 函数(同ProcessID)
- 六、公有方法属性等
- hWnd 公有变量
- DebugMe 公有变量
- Wait 方法
- Version 方法
- 使用范例
- 01 控制微信发送消息
- 02 控制QQ发送消息
- 03 QQ登录器
- 04 花式调用计算器
- 05 用鼠标在画图工具上画圆
- 06 控制记事本输入并保存
- 07 随机移动鼠标防锁屏
- 08 根据ID进入腾讯课堂
- 09 限制程序重复打开
- 10 控制c2p软件将ceb转换为pdf格式
- 11 实战:微便签-窗口特效
- 12 实战:窗口图钉-窗口置顶
- 13 实战:微型按键精灵,录制和播放鼠标动作
- 一些Q&A
- 01 这个框架是免费的吗?
- 02 无句柄的控件元素如何操作?
- 03 目标窗体中有相同类名输入框如何区分填写?
- 04 为什么win10下最大化不生效?
- 05 如何确定绝对或相对坐标?
- 06 相同标题的窗口如何得到所有句柄?
- 联系我们