按键精灵开发教程:遍历子窗口

2025-01-05 06:06:32

1、>>题意解析

按键精灵开发教程:遍历子窗口

5、遍历子窗口源码分享Function遍历子窗口(Parent,ClassName)DimRetStr,TmpHdr//定义局部变量DoTmpHdr=Plugin.Window.FindEx(Parent,TmpHdr,0,0)//查找子窗口IfTmpHdrThen//判断是否有查找到子窗口IfPlugin.Window.GetClass(TmpHdr)=ClassNameThen//判断窗口类名RetStr=RetStr&TmpHdr&"|"//符合则记录窗口句柄RetStr=RetStr&遍历子窗口(TmpHdr,ClassName)//递归寻找下一级窗口ElseRetStr=RetStr&遍历子窗口(TmpHdr,ClassName)//递归寻找下一级窗口EndIfEndIfLoopWhileTmpHdr//如果没有子窗口则退出循环遍历子窗口=RetStr//将查找到的符合的窗口句柄返回EndFunction

6、代码分析要怎么理解递归呢?《盗梦空间》不知道大伙有没有看过,小编很喜欢这部电影,刺激带感……咳咳言归正传我们可以把递归比作梦境来理解。整个遍历子窗口函数就是一个梦境当我们在脚本开始的时候,还清醒着。TracePrint遍历子窗口(65608,"Button")执行这句的时候,我们就带着65608,"Button"这两个参数值进入了第一重梦境

7、>>第一重梦境先将RetStr,TmpHdr两个变量定义成局部变量,局部变量只作用于当前梦境,进入下一重梦境,它们会初始化。进入循环,查找子窗口我们带来的两个参数,65608是传递给parent的,而Tmphdr此刻的值是0/空。带入TmpHdr=Plugin.Window.FindEx(Parent,TmpHdr,0,0)中运算:TmpHdr=Plugin.Window.FindEx(65608,0,0,0)TmpHdr=65614

按键精灵开发教程:遍历子窗口

9、此时TmpHdr=65614ClassName值不变parent=65608

10、>>第二重梦境TmpHdr的值传递给了parentClassName的值传递给了ClassName之前在第一重梦境里的RetStr和TmpHdr的值在第二重梦境不生效,初始化为0/空带入TmpHdr=Plugin.Window.FindEx(Parent,TmpHdr,0,0)中运算:TmpHdr=Plugin.Window.FindEx(65614,0,0,0)TmpHdr=65616

按键精灵开发教程:遍历子窗口

12、 此时TmpHdr=65616ClassName值不变Parent=65614

13、>>第三重梦境TmpHdr的值传递给了parentClassName的值传递给了ClassName带入TmpHdr=Plugin.Window.FindEx(Parent,TmpHdr,0,0)中运算:TmpHdr=Plugin.Window.FindEx(65616,0,0,0)TmpHdr=0

按键精灵开发教程:遍历子窗口

15、第三重梦结束,我们在第二重梦醒来。>>第二重梦境我们进入第三重梦境之前,第二重梦境里:TmpHdr=65616ClassName值不变Parent=65614这些值没有变化。我们接着循环,带入TmpHdr=Plugin.Window.FindEx(Parent,TmpHdr,0,0)中运算:TmpHdr=Plugin.Window.FindEx(65614,65616,0,0)TmpHdr=65618

按键精灵开发教程:遍历子窗口

17、65630还有一个下级窗口65632所以进入到第三重梦境的时候,还没有结束,会进入第四重梦境,第四重梦境里没有找到子窗口,则梦醒,回到第三重梦境,第三重梦境再继续循环,发现已经没有其它的下级窗口了,则梦醒,回到第二重梦境,继续循环。

猜你喜欢