开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 1015|回复: 2
收起左侧

[已解决] Accessible解析速度都这么慢么?

 关闭 [复制链接]
结帖率:97% (98/101)
发表于 2022-1-31 14:30:30 | 显示全部楼层 |阅读模式   重庆市重庆市
12精币
  
子程序名返回值类型公开备 注
自绘窗口_Accessible定位逻辑型 是否成功定位
参数名类 型参考可空数组备 注
原Accessible类_Accessible传入即将要定位的Accessible根节点
表达式文本型">"进入下一节点,"#"根据序号进入节点,"?"根据条件进入节点,"&"且,"=="恒等于,"="包含于。n控件名称,s控件状态,t控件类型,id控件ID,v控件值。|例子“#4>#2>?n==ABC&t=EDF>#2”,意思为从根节点开始首先进入第4个节点再进入第2个节点再判断控件名称为ABC且控件类型内容含有EDF的节点再进入第2个节点
定位后Accessible类_Accessible返回定位后Accessible
变量名类 型静态数组备 注
子表达式文本型0
i整数型 
command文本型 
opertor文本型 
childcount整数型 
Accessibles类_Accessible0
j整数型 
found逻辑型 
Accessible类_Accessible 
Accessible = 原Accessible
计次循环首 (文本_分割文本 (表达式, “>”, , 子表达式), i)
opertor = 取文本左边 (子表达式 [i], 1)
command = 取文本右边 (子表达式 [i], 取文本长度 (子表达式 [i]) - 1)
childcount = Accessible.取子元素总数 ()
判断 (opertor = “#”)
如果 (取绝对值 (到整数 (command)) > childcount)
返回 ()
如果 (到整数 (command) > 0)
如果真 (Accessible.取子元素 (到整数 (command), Accessible))
返回 ()

如果 (到整数 (command) < 0)
如果真 (Accessible.取子元素 (childcount + 到整数 (command) + 1, Accessible))
返回 ()

返回 ()



判断 (opertor = “?”)
childcount = Accessible.枚举子元素 (Accessibles)
found = 假
计次循环首 (childcount, j)
如果真 (内部_解析命令 (command, Accessibles [j]))
Accessible = Accessibles [j]
found = 真
跳出循环 ()

计次循环尾 ()
如果真 (found = )
返回 ()




计次循环尾 ()
定位后Accessible = Accessible
返回 ()
子程序名返回值类型公开备 注
_按钮8_被单击  
变量名类 型静态数组备 注
局_句柄整数型 
Accessible类_Accessible 
定位后Accessible类_Accessible 
资产数组类_Accessible0
持仓数组类_Accessible0
详细信息精易_详细信息 
i整数型 
表达式文本型 
表达式2文本型 
测速测速 
n整数型 
局_句柄 = 窗口_取句柄 (, , “Qt5QXXXX”, “XXX软件 V9.0”)  '
输出调试文本 (“局_句柄=”到文本 (局_句柄))
Accessible.创建自窗口句柄 (局_句柄)
' ">"进入下一节点,"#"根据序号进入节点,"?"根据条件进入节点,"&"且,"=="恒等于,"="包含于。n控件名称,s控件状态,t控件类型,id控件ID,v控件值。|例子“#4>#2>?n==ABC&t=EDF>#2”,意思为从根节点开始首先进入第4个节点再进入第2个节点再判断控件名称为ABC且控件类型内容含有EDF的节点再进入第2个节点
测速.测速_开始 ()
计次循环首 (1, i)
' 自绘窗口_Accessible定位 (Accessible, “?t==客户端&s==正常>#1>#1>#1>#1>#2>#2>#1>#1>#3>#1>#1>#1>#1”, 定位后Accessible)  ' ?n==我的&t==选项卡>  ?s==正常&t==客户端>#1>#1>#1>#1>#1
' * “i=1NAMELESS” | “可设定焦点,” | “客户端” | 2
' * “i=2日志” | “不可见,” | “窗口” | 3
' * “i=3NAMELESS” | “正常” | “客户端” | 6
' * “i=4NAMELESS” | “正常” | “客户端” | 0
' * “i=5NAMELESS” | “正常” | “客户端” | 2
' * “i=6NAMELESS” | “正常” | “客户端” | 1
' * “i=7NAMELESS” | “正常” | “客户端” | 1
' 自绘窗口_Accessible定位 (Accessible, “#4>#1>#1>#” + 到文本 (i), 定位后Accessible)  ' ?n==我的&t==选项卡>  ?s==正常&t==客户端>#1>#1>#1>#1>#1
表达式 = “?t==对话框>?t==客户端>”  ' 这一级才是助手分析的第一级客户端
表达式2 = 表达式 + “#1>#1>#1>#1>#2>?s==可设定焦点,&t==客户端>#1>#1>#1>#1>#1>#1>#1>#1>#1>#1>#1>”
自绘窗口_Accessible定位 (Accessible, 表达式2, 定位后Accessible)  ' 现金资产 '+ “#” + 到文本 (3)
定位后Accessible.枚举子元素 (资产数组)  ' 枚举的效率比每次都格式化信息高很多很多
输出调试文本 (资产数组 [3].取名称 ())
输出调试文本 (资产数组 [6].取名称 ())
输出调试文本 (资产数组 [9].取名称 ())
输出调试文本 (资产数组 [12].取名称 ())
输出调试文本 (资产数组 [15].取名称 ())
输出调试文本 (资产数组 [19].取名称 ())
' 详细信息 = 自绘窗口_格式化信息 (定位后Accessible)
' 定位后Accessible.取名称 ()
' 调试输出 (“i=” + 到文本 (i) + “ ' 现金资产 ” + 详细信息.控件名称, 详细信息.控件状态, 详细信息.控件类型, 定位后Accessible.取子元素总数 ())
' 自绘窗口_Accessible定位 (Accessible, 表达式2 + “#” + 到文本 (6), 定位后Accessible)
' ' 详细信息 = 自绘窗口_格式化信息 (定位后Accessible)
' 定位后Accessible.取名称 ()
' ' 调试输出 (“i=” + 到文本 (i) + “ ' 可用资金 ” + 详细信息.控件名称, 详细信息.控件状态, 详细信息.控件类型, 定位后Accessible.取子元素总数 ())
' 自绘窗口_Accessible定位 (Accessible, 表达式2 + “#” + 到文本 (9), 定位后Accessible)
' ' 详细信息 = 自绘窗口_格式化信息 (定位后Accessible)
' 定位后Accessible.取名称 ()
' ' 调试输出 (“i=” + 到文本 (i) + “ ' 总市值 ” + 详细信息.控件名称, 详细信息.控件状态, 详细信息.控件类型, 定位后Accessible.取子元素总数 ())
' 自绘窗口_Accessible定位 (Accessible, 表达式2 + “#” + 到文本 (12), 定位后Accessible)
' ' 详细信息 = 自绘窗口_格式化信息 (定位后Accessible)
' 定位后Accessible.取名称 ()
' ' 调试输出 (“i=” + 到文本 (i) + “ ' 总资产 ” + 详细信息.控件名称, 详细信息.控件状态, 详细信息.控件类型, 定位后Accessible.取子元素总数 ())
' 自绘窗口_Accessible定位 (Accessible, 表达式2 + “#” + 到文本 (15), 定位后Accessible)
' ' 详细信息 = 自绘窗口_格式化信息 (定位后Accessible)
' 定位后Accessible.取名称 ()
' ' 调试输出 (“i=” + 到文本 (i) + “ ' 参考盈亏 ” + 详细信息.控件名称, 详细信息.控件状态, 详细信息.控件类型, 定位后Accessible.取子元素总数 ())
' 自绘窗口_Accessible定位 (Accessible, 表达式2 + “#” + 到文本 (19), 定位后Accessible)
' ' 详细信息 = 自绘窗口_格式化信息 (定位后Accessible)
' 定位后Accessible.取名称 ()
' ' 调试输出 (“i=” + 到文本 (i) + “ ' 盈亏比例 ” + 详细信息.控件名称, 详细信息.控件状态, 详细信息.控件类型, 定位后Accessible.取子元素总数 ())
表达式 = “?t==对话框>?t==客户端>”  ' 这一级才是助手分析的第一级客户端
表达式2 = 表达式 + “#1>#1>#1>#1>#2>?s==可设定焦点,&t==客户端>#1>#1>#3>#1>#1>#1>#1>”
自绘窗口_Accessible定位 (Accessible, 表达式2, 定位后Accessible)  ' 现金资产 '+ “#” + 到文本 (3)
' 详细信息 = 自绘窗口_格式化信息 (定位后Accessible)
' 调试输出 (“i=” + 到文本 (i) + “ ” + 详细信息.控件名称, 详细信息.控件状态, 详细信息.控件类型, 定位后Accessible.取子元素总数 ())
定位后Accessible.枚举子元素 (持仓数组)  ' 枚举的效率比每次都格式化信息高很多很多
计次循环首 (取数组下标 (持仓数组, ), n)
如果真 (持仓数组 [n].取角色文本 ()“单元格”)
' 输出调试文本 (持仓数组 [n].取名称 ())

计次循环尾 ()
' 输出调试文本 (持仓数组 [3].取名称 ())
' 调试输出 (持仓数组)
计次循环尾 ()
测速.测速_结束 (“解析耗时”)
输出调试文本 (“__________”)
' 调试输出 (功能_取自绘信息2 (局_句柄))
子程序名返回值类型公开备 注
内部_解析命令逻辑型 
参数名类 型参考可空数组备 注
command文本型
Accessible类_Accessible
变量名类 型静态数组备 注
k整数型 
equal文本型0
contain文本型0
详细信息精易_详细信息 
child_commands文本型0
详细信息 = 自绘窗口_格式化信息 (Accessible)
child_commands = 分割文本 (command, “&”, )
计次循环首 (取数组成员数 (child_commands), k)
判断 (寻找文本 (child_commands [k], “==”, , ) ≠ -1)
equal = 分割文本 (child_commands [k], “==”, )
判断 (equal [1]“n”)
如果真 (详细信息.控件名称 ≠ equal [2])
返回 ()

判断 (equal [1]“s”)
如果真 (详细信息.控件状态 ≠ equal [2])
返回 ()

判断 (equal [1]“t”)
如果真 (详细信息.控件类型 ≠ equal [2])
返回 ()

判断 (equal [1]“id”)
如果真 (详细信息.控件ID ≠ equal [2])
返回 ()

判断 (equal [1]“v”)
如果真 (详细信息.控件值 ≠ equal [2])
返回 ()

返回 ()

判断 (寻找文本 (child_commands [k], “=”, , ) ≠ -1)
contain = 分割文本 (child_commands [k], “=”, )
判断 (contain [1]“n”)
如果真 (寻找文本 (详细信息.控件名称, contain [2], , ) = -1)
返回 ()

判断 (contain [1]“s”)
如果真 (寻找文本 (详细信息.控件状态, contain [2], , ) = -1)
返回 ()

判断 (contain [1]“t”)
如果真 (寻找文本 (详细信息.控件类型, contain [2], , ) = -1)
返回 ()

判断 (contain [1]“id”)
如果真 (寻找文本 (详细信息.控件ID, contain [2], , ) = -1)
返回 ()

判断 (contain [1]“v”)
如果真 (寻找文本 (详细信息.控件值, contain [2], , ) = -1)
返回 ()




返回 ()

计次循环尾 ()
返回 ()



调试输出
* 局_句柄=14224664
* 571.24
* 571.88
* 1352319.73
* 1352890.97
* 10414.69
* 0.78%
* 解析耗时1437


其中前面5个结果耗时200毫秒左右  最后一次持仓数组 250个单元格没有调试输出的情况下耗时1200毫秒 一共耗时1400毫秒,好慢啊。我还是选择了层级后用的枚举,如果每一个都用自绘窗口_格式化信息的话 更慢……

定位层级的源码来自于他 https://bbs.125.la/forum.php?mod ... ighlight=Accessible

另外如果用精易的自绘解析的话 那就接近10秒了……有啥改进(这是备用方案,我不需要成品)

最佳答案

查看完整内容

快用协yi!!!!!

回答提醒:如果本帖被关闭无法回复,您有更好的答案帮助楼主解决,请发表至 源码区 可获得加分喔。
友情提醒:本版被采纳的主题可在 申请荣誉值 页面申请荣誉值,获得 1点 荣誉值,荣誉值可兑换荣誉会员、终身vip用户组。
快捷通道:申请荣誉值无答案申请取消悬赏投诉有答案未采纳为最佳

签到天数: 10 天

发表于 2022-1-31 14:30:31 | 显示全部楼层   广东省广州市
快用协yi!!!!!
回复

使用道具 举报

结帖率:97% (98/101)

签到天数: 15 天

 楼主| 发表于 2022-1-31 22:04:11 | 显示全部楼层   重庆市重庆市
sinewtec 发表于 2022-1-31 21:22
快用协yi!!!!!

我是用的协yi……我这不是准备个后手吗……
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 诚聘英才| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 800073686,邮箱:800073686@b.qq.com
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表