作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用主动辅助功能框架来枚举给定程序的所有控件。问题是,当我遍历控件树时,它会在资源管理器或 visual studio 等复杂应用程序上花费很长时间。简单的应用程序大约需要 1 秒,但具有大量控件的大型应用程序可能需要 10 秒。有人经历过吗?我还找到了一些关于在进程内与进程外使用 MSAA 的引用资料。这是什么意思?
最佳答案
首先,递归遍历时要小心,因为有时会发生“树”中存在“循环”的情况,你不能真正可靠地比较对象,看看你是否已经到了这个对象...
Active Accessibility 如此缓慢的主要原因是,它不被认为是递归遍历的,而只是显示有关单个元素(光标下方)或其子元素的详细信息。每个 AA 请求(针对每个属性)都必须将上下文切换到目标应用程序并再次返回。而且,如果您正确地执行了 AA(所有 UI 对象都附有大量描述),那么只有几千个对象需要时间来遍历...
如果您正在寻找特定的东西,直接请求可能更容易,而不是遍历所有控件。或者,如果您只是在寻找某些类型的对象,这些对象只出现在具有您知道的其他属性的 HWND 中,那么首先枚举所有 HWND 然后对它们调用 AccessibleObjectFromWindow
会快得多(这不会仅适用于顶层窗口,也适用于子窗口)。在枚举他们的 child 时,您可以在 HWND 属性发生变化时立即停止。
并为递归深度添加一些硬最大计数器,以避免遇到其中一个循环。
关于winapi - Microsoft Active Accessibility 在枚举控件时 super 慢。帮助!,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/949765/
我是一名优秀的程序员,十分优秀!