Ozz*_*zah 5 c# windows ui-automation
我的表单上有一个TreeView控件,我以递归方式从窗口本身开始浏览另一个窗口的元素.我用这个来找到元素:
getRecursiveElements(AutomationElement parent)
{
children = parent.FindAll(TreeScope.Children, Condition.TrueCondition);
foreach (AutomationElement child in children)
{
addToTreeView(child);
getRecursiveElements(child);
}
}
Run Code Online (Sandbox Code Playgroud)
一般来说,代码在大多数情况下都能很好地工作.树被填充,我有一些其他支持代码,允许我双击,例如,树视图中的元素,它将突出显示目标表单上的元素.
我遇到的问题是,虽然它生成了一个很棒的树,但某些目标程序仍然缺少一些元素.
可能有什么理由可以解决这个问题,有什么方法可以解决这个问题吗?如果我EnumChildWindows()从user32.dll 调用会有同样的问题吗?
并非所有程序都对其所有逻辑子项使用单独的窗口控件。这主要取决于所使用的 GUI 框架。
作为一个极端的例子,Qt 为每个顶级窗口使用一个窗口。然后它从窗体的 WM_PAINT 消息处理程序中绘制窗体上的所有小部件。
采用这种方法的程序通常不可能通过通用方法实现自动化。
听起来您遇到了一个应用程序,它使用一些窗口控件,但也使用带有单个窗口的自定义控件来显示多个小部件。这也是很常见的。
| 归档时间: |
|
| 查看次数: |
6167 次 |
| 最近记录: |