我在窗体上有一个TreeView控件,我递归地浏览窗口本身开始的另一个窗口的元素。我正在使用它来查找元素:Windows用户界面自动化不显示所有子元素?
getRecursiveElements(AutomationElement parent)
{
children = parent.FindAll(TreeScope.Children, Condition.TrueCondition);
foreach (AutomationElement child in children)
{
addToTreeView(child);
getRecursiveElements(child);
}
}
一般而言,代码在大多数情况下工作得很好。树被填充,我有一些其他支持代码允许我双击,例如树视图中的一个元素,它会突出显示目标表单上的元素。
我遇到的问题是,虽然它生成了一个很棒的树,但仍有一些元素缺少某些目标程序。
这有什么可能的原因,有什么办法可以解决吗? 如果我从user32.dll中调用EnumChildWindows()
会有同样的问题吗?
你可以举一些它正在跳过的元素类型的例子吗?您是否将您的树与SDK中的UISpy或Inspect工具生成的树相比较? UIA确实有一个'views'的概念,它是一个除了提供给Find的条件外还应用的过滤器。默认情况下,UIA会过滤掉不是内容元素的东西,因此如果枚举列表框或列表视图,则只会显示列表框,但不会显示滚动条或标题。这是你错过的东西,还是其他的东西? – BrendanMcK