如何遍历程序的所有子元素

本文关键字:元素 程序 何遍历 遍历 | 更新日期: 2023-09-27 18:16:59

我想构建一个应用程序中存在的UI元素树。我正在尝试使用微软用户界面自动化。我可以通过访问AutomationElement访问桌面。但是我不确定如何访问在桌面上运行的应用程序。

主要目标是构建已经在桌面上运行的目标应用程序的UI树。我无法访问目标应用程序的代码。

当我试图运行

foreach (var item in AutomationElement.RootElement.CachedChildren)
        {
            Console.WriteLine(item.ToString());
        }

它给了我致命的错误:无法获得未缓存的属性或元素。

请建议解决这个问题的最好方法。

如何遍历程序的所有子元素

您正在尝试使用UIA的缓存功能,该功能允许您缓存AutomationElements及其属性,并在访问它们时提高性能。这是一个高级功能,显然与您的问题无关,因为您首先需要从UI树中实际获取AutomationElements

此外,您的代码,即使它工作,也不会返回所有的树,只是桌面的子元素(在UIA中,"子元素"实际上是指在特定元素下只找到一个层次结构的元素)。为了在UI树上导航,您需要使用TreeWalker类。在MSDN上有相当好的文档,所以我建议你在开始使用它之前先去那里看看。

注意,如果您想映射您自己的应用程序,而不是整个UI树,您需要实例化TreeWalker对象,该对象将返回您的应用程序的主窗口。

最后一个注意-在AutomationElement上调用ToString()不会返回任何特别感兴趣的内容。如果您想获得控件的名称或任何其他属性,您将需要使用GetCurrentPropertyValue方法(或访问Current.{PropertyName})。