我试图通过UIAutomationCore.dll库进行特定控制。 问题是,我无法从代码(未找到所需的孩子)和UISpy 看到它(它显示异常" UI自动化树导航被破坏。其中一个的父后代存在,但后代不是父母的孩子")直到我启动inspect.exe甚至一秒钟 - 然后它出现,这个效果一直持续到程序窗口重新打开。
有类似question,但应用程序运行在同一个非管理员级别的UAC上。
这是我的代码。这是VS Code选项卡的一个示例,但我也遇到了Slack及其"文档"的问题。
static bool Do(IntPtr handle)
{
CUIAutomation8 uiAutomation = new CUIAutomation8();
int propertyName = 30005;
int propertyLocalizedType = 30004;
IUIAutomationElement element = uiAutomation.ElementFromHandle(handle);
if (element == null)
return false;
IUIAutomationCacheRequest cacheRequest = uiAutomation.CreateCacheRequest();
cacheRequest.AddProperty(propertyName);
IUIAutomationCondition tabCondition = uiAutomation.CreatePropertyCondition(propertyLocalizedType, "tab");
IUIAutomationElementArray elements = element.FindAllBuildCache(
TreeScope.TreeScope_Descendants,
tabCondition,
cacheRequest);
if (elements == null || elements.Length == 0)
return false;
for (int i = 0; i < elements.Length; ++i)
{
//do something
}
return true;
}
答案 0 :(得分:0)
我有非常相似的经历-在应用程序短暂运行inspect.exe之前,应用程序的某些UI树是不可见的。最终,我发现将注册表项HKCU \ Control Panel \ Accessibility \ Blind Access \ On设置为“ 1”可以使其正常运行。真正有趣的部分是:
尽管丢失子树在Windows 7和8.1上具有很高的可重现性,但在Windows 10上却具有较低的可再现性-仅发生在我们尝试过的4-5台计算机中的一台上。
我找不到任何有关此注册表值实际表示的文档。它似乎没有直接映射到任何“易用性”设置。但是,我看起来并不广泛。