六级认证--遍历子窗口源码分享
本文由按键学院提供技术支持
按键学院交流群(1群已满):376122403
零基础学按键精灵群(2群):372671254
遍历一个窗口的所有子窗口,返回符合条件(标题或类名)的窗口句柄,请写出函数(遍历子窗口). |
|
>>题意解析
- 您所在的用户组无法下载或查看附件

假设红色框框圈起来的就是我们要遍历的窗口。
那么,我们要遍历到的是这个窗口下的所有子窗口,二级子窗口,三级子窗口……有多少级都要遍历下去。
如果遍历到类名或标题符合的子窗口,则记录下来。

以上图的窗口为例,
假设我们设置的返回条件是窗口类名=Button,
那么只有 窗口句柄为65638这个子窗口符合条件,则返回窗口句柄:65638
假设我们设置的返回条件是窗口类名=ToolbarWindow32 ,
那么有两个子窗口符合条件,则返回这两个窗口的窗口句柄:65632和65636
有多少童鞋坑在了这一题呢? 是否写了很长的一段代码,但是测试的时候发现就是行不通?
 不必烦恼不必彷徨,小编今天带来了 工程师06,也就是咱们骚气的06老师的精品代码, 十六行代码搞定遍历子窗口
 |
思路
- 您所在的用户组无法下载或查看附件
遍历子窗口源码分享- Function 遍历子窗口(Parent, ClassName)
- Dim RetStr,TmpHdr //定义局部变量
- Do
- TmpHdr = Plugin.Window.FindEx(Parent, TmpHdr, 0, 0) //查找子窗口
- If TmpHdr Then // 判断是否有查找到子窗口
- If Plugin.Window.GetClass(TmpHdr) = ClassName Then //判断窗口类名
- RetStr = RetStr & TmpHdr & "|" //符合则记录窗口句柄
- RetStr = RetStr & 遍历子窗口(TmpHdr, ClassName)//递归寻找下一级窗口
- Else
- RetStr = RetStr & 遍历子窗口(TmpHdr, ClassName)//递归寻找下一级窗口
- End If
- End If
- Loop While TmpHdr //如果没有子窗口则退出循环
- 遍历子窗口 = RetStr //将查找到的符合的窗口句柄返回
- End Function
复制代码 代码分析 要怎么理解递归呢? 《盗梦空间》不知道大伙有没有看过,小编很喜欢这部电影,刺激、带感……咳咳 言归正传 我们可以把递归比作梦境来理解。
|
整个 遍历子窗口 函数就是一个梦境
当我们在脚本开始的时候,还清醒着。
TracePrint 遍历子窗口(65608,"Button") 执行这句的时候,我们就带着
65608,"Button"这两个参数值进入了第一重梦境