0

我有一个 ComboBox 包含一个列表(这是组合框的标准),它有很多元素 - 超过 100 个。我想找到某些条目来选择它们。为了找到条目,我将给定的模式与每个元素的名称进行比较。

出于性能原因(超过 100 个元素),我在父级上使用了 CacheRequest,其范围为所有子级,因此我可以非常快速地遍历所有子级并找到我想要选择的子级的正确索引。

问题来了:我有我想要的正确索引,我也有缓存的 AutomationElement,但是由于我在 CacheRequest 中指定了 AutomationElementMode.None(我仍然需要测试它是否会对性能产生影响),我似乎不是能够将缓存的元素转换为可用于将来调用的元素(“实时”元素)。

我尝试通过NativeWindowHandle进行转换(因为有一个函数AutomationElement.FromWindowHandle),但是句柄似乎为0,所以这是没有办法的。

我还没有尝试使用缓存的 SelectionPattern - 因为 ComboBoxes 有时是定制的,我不知道这是否适用于所有情况(如果有的话)。

我有子索引,我可以获得所有可以缓存的值 - 如何获得缓存元素的工作/实时 AutomationElement?

谢谢安德烈亚斯

(在带有 win32 应用程序(作为自动化目标)的 Windows 7 64 上使用 C#,尽管这不会有太大的区别)

4

2 回答 2

0

除了索引之外,您还有需要的子文本吗?如果是这样,是否可以将子文本发送到组合框,就好像用户正在键入以选择您需要的孩子而不是尝试获取自动化元素一样?

总是有 IUIAutomationLegacyIAccessiblePattern 可以依靠,但我认为这只是在核心 API 中,而不是在客户端(AutomationElement)中。

于 2012-06-05T15:14:14.600 回答
0

实际上,使用 AutomationElementMode.None 似乎不是最好的主意。缓存请求所花费的时间似乎仅受您是否请求活动元素以及您请求的属性数量的轻微影响。(如果我错了,请纠正我 - 我没有系统地测试,但最近在我的缓存请求上玩弄一些选项时有这种感觉。)

它似乎主要受您首先请求的 UI 元素数量的影响。

所以我可以首先请求一个实时链接。

这让我现在想知道通过某些 Win32SDK 功能访问是否会更快..

于 2012-08-09T08:40:45.687 回答