如何使用UIA2或UIA3获取FlaUI无法识别的界面元素
FlaUI无法读取窗口元素解决方案

可行解决方法如下:
- 切换UI自动化实现版本
FlaUI内置UIA2、UIA3两套UI自动化接口,inspect.exe会自动适配对应版本,而FlaUI默认选择的版本可能和目标应用不兼容。优先尝试切换为UIA3实现,老旧应用再切换为UIA2测试:
// 引入UIA3命名空间 using FlaUI.UIA3; // 初始化时使用UIA3实例 using var automation = new UIA3Automation(); // 挂载目标进程后获取窗口 var targetApp = FlaUI.Core.Application.Attach("目标进程名称"); var targetWindow = targetApp.GetMainWindow(automation);
- 提升程序运行权限
如果目标窗口是管理员权限启动的,运行FlaUI的程序、FlaUIInspect必须同样以管理员身份启动,否则会因为权限不足无法读取窗口内元素。 - 关闭缓存实时遍历元素
默认的缓存查找可能无法读取动态渲染的元素,调用查找方法时指定禁用缓存:
// TreeScope.Descendants 遍历所有后代节点,最后一个参数设置为false禁用缓存 var allElements = targetWindow.FindAll(TreeScope.Descendants, Condition.TrueCondition, false);
- 通过窗口句柄直接获取元素
如果通过进程获取主窗口失败,可以先通过Win32 APIFindWindow获取目标窗口的句柄,再转为FlaUI元素实例:
// hWnd为Win32 API拿到的目标窗口句柄 var windowElement = automation.FromHandle(hWnd); var allDescendants = windowElement.FindAll(TreeScope.Descendants, Condition.TrueCondition);
内容的提问来源于stack exchange,提问作者SandyKrish
相关产品推荐
相关产品推荐

