使用UIAutomation .NET查找桌面上的所有窗口
问题描述:
我正在尝试使用.NET UIAutomation或白色框架查找所有桌面窗口。 我想:使用UIAutomation .NET查找桌面上的所有窗口
1)
AutomationElement rootElement = AutomationElement.RootElement;
var winCollection = rootElement.FindAll(TreeScope.Subtree, Condition.TrueCondition);
2)
Desktop.Instance.Windows();
两个罚球的ArgumentException。 请让我知道是否有其他方法可以做到这一点...
更新/回答:Desktop.Instance.Windows();可以正常工作,只是在使用VS2010调试代码时抛出异常。
答
使用TreeScope.Children
应该工作,如果你想用的FindAll调用的方式访问桌面的直接子元素::
AutomationElement rootElement = AutomationElement.RootElement;
var winCollection = rootElement.FindAll(TreeScope.Children, Condition.TrueCondition);
foreach (AutomationElement element in winCollection)
Console.WriteLine(element.Current.Name);
答
这是不可能的。只有通过调用FindWindow才能使用某些类型的窗口。这些可能是MMC控制台的一个子窗口,当mmc的主窗口被隐藏并且对UI自动化不可用时。 如果窗口不是应用程序的主窗口,有没有办法让窗口打开的线程?答案是枚举线程(通常需要管理权限)并计算出我们感兴趣的窗口所属的线程。
一般来说,似乎没有办法列举所有的窗口,因为它没有Spy ++。例如,如果UI Automation搜索没有结果,Get-UIAWindow只需调用FindWindow。
答
在工作中UI自动化项目使用:
List<White.Core.UIItems.WindowItems.Window> windows = WindowFactory.Desktop.DesktopWindows();