快速UIA TreeWalk

时间:2019-07-09 21:44:41

标签: ui-automation microsoft-ui-automation

我正在尝试使用Windows UI自动化API解决以下问题:

给出桌面上的一点(x,y),我要确定以下内容的“非常快”(小于100毫秒):

  1. (x,y)下的AutomationElement
  2. 这套AutomationElement表示从尖的元素一直到根(或到顶层窗口)的路径。

问题1似乎很简单:调用ElementFromPoint(x,y)。对随机点进行简单测试,平均结果大约为20毫秒,具体取决于可视化树中被单击元素的复杂程度和深度。

问题2更复杂:我似乎没有找到使用缓存来加快视觉树浏览速度的方法:

    根据文档,
  • 缓存整个可视树太慢,可能永远无法完成;即使我设法缓存了所有内容,但在执行几次用户操作后便无效了,需要刷新
  • 不允许对祖先进行范围缓存(这样的想法是,当您深入UI时,可视树的上层已经被缓存并且不需要刷新)
  • 查找所有可点击元素及其祖先似乎也很慢

其背后的想法是在执行全局鼠标挂钩期间,在调用下一个挂钩处理程序之前,为GUI上每个被单击元素计算XPath。如果处理程序很慢,则会影响用户体验,最终Windows将取消订阅该处理程序。根据一些读数,如果处理程序花费的时间超过100毫秒,则GUI开始变得缓慢。

我知道Windows不是实时操作系统,使用绝对时间并不适用,因此将100毫秒设为“足够快,用户不会注意到”。

我希望那里的人已经解决了这个问题,并可以提供一些指导。更好的是,我希望对API有内部了解的人能够对计划的可行性或替代方案提供一些指示。

非常感谢!!

0 个答案:

没有答案