结论
前几篇文章在这里:
- .NET C# AutomationElement 获取桌面UI元素
- .NET C# 手撕线程池 | 县城撕裂者
- .NET C# AutomationElement 加速探索
- .NET C# UIAutomationElement 获取桌面元素
- .NET C# 通过Win32API获取窗口及控件的信息
经过几天的研究初步获得了如下的结论:
Win32API
不靠谱- 和
Snipaste
开发大佬交流后得知的MSAA方法有局限,对于Text
属性可能不能读取(这个功能对我来说至关重要,替代品为UIAutomation
)
先说测试后的结论:
- 竟然是
System.Windows.Automation
最高效 - 手写的剪枝
DFS
比微软封装的方法高效 - 如果测试的时候用户在操作其他UI或有UI变化会导致速度变慢
- 多线程优化几乎没有效果
猜测:
- 瓶颈就是这个需求本身
- 速度取决于Server端,和如何实现无关
测试
测试范围:
System.Windows.Automation
- 手写带有剪枝的
DFS
- 线程池优化的剪枝
DFS
- 使用
Walker
写DFS
- 直接使用
FindAll(TreeScope.Descendants)
- 手写带有剪枝的
UIAutomationClient (COM)
- 手写带有剪枝的
DFS
- 线程池优化的剪枝
DFS
- 使用
Walker
写DFS
- 直接使用
FindAll(TreeScope.Descendants)
- 手写带有剪枝的
测试代码: