我在窗体上有一个TreeView控件,我recursion地浏览窗口本身开始的另一个窗口的元素。 我正在使用它来查找元素:
getRecursiveElements(AutomationElement parent) { children = parent.FindAll(TreeScope.Children, Condition.TrueCondition); foreach (AutomationElement child in children) { addToTreeView(child); getRecursiveElements(child); } }
一般来说,代码在大多数情况下工作得很好。 树被填充,我有一些其他的支持代码允许我双击,例如,在树视图中的元素,它会突出显示目标表单上的元素。
我遇到的问题是,虽然它产生了一个令人敬畏的树,但仍有一些元素缺less某些目标程序。
有什么可能的原因,有没有办法解决这个问题? 如果我从user32.dll调用EnumChildWindows()
会有同样的问题?
并非所有的程序都为其所有的逻辑子项使用单独的窗口控件。 这主要取决于所使用的GUI框架。
作为一个极端的例子,Qt为每个顶层窗口使用一个窗口。 然后,它从窗体的WM_PAINT消息处理程序中绘制窗体上的所有窗口小部件。
采用这种方法的程序通常不可能通过泛型方法自动化。
这听起来像你遇到了一个应用程序,使用一些窗口控件,但也使用自定义控件与一个窗口似乎是多个小部件。 这又是相当普遍的。
你能否举一个更好的例子来说明失败的原因? 考虑到这个问题,可能是因为其他形式的“元素”是手动绘制的,所以没有明确的注册处理。