MSAA发现的控件UI Automation没有发现

4

我正在自动化一个Windows应用程序。我使用的是TestStack White框架。但是,我遇到了一个问题。这个程序有一个‘Window’对象,我无法看到它里面的控件。White也没有显示其中的任何控件。当在UI Automation模式下运行Inspect.exe时,它也没有显示其中的任何控件。如果我将Inspect切换到MSAA,就可以很好地看到其中的控件。是否有办法让我从C#中使用MSAA来获取这些控件的句柄?

1个回答

5
如果你能够确定需要使用的MSAA函数,可以使用P/Invoke从C#中调用它们。这是一个有关如何使用MSAA的示例文章:http://www.codeproject.com/Articles/38906/UI-Automation-Using-Microsoft-Active-Accessibility
此外,可以使用pinvoke.net来识别IAccessible(MSAA)函数:http://www.pinvoke.net/search.aspx?search=IAccessible&namespace=[All]。还有另一个SO答案与此类似:MSAA COM-based? 最后,作为P/Invoke的替代方案,您还可以尝试使用Tlbimp.exe为oleacc.dll创建包装器程序集,并通过其访问MSAA功能。我不确定这是否适用于MSAA,但值得一试。作为示例,这是我编写的一个C# hello world示例,展示了如何使用使用Tlbimp.exe创建的程序集从C#中使用UI Automation COM接口:https://github.com/billagee/test-polyglot/blob/master/printDesktopUiaElementName/ms-ui-automation-com-api/csharp/PrintDesktopUiaElementNameViaCom/PrintDesktopUiaElementNameViaComProgram.cs。如该文件中的注释所述,从Windows 7.1 SDK开始,使用Tlbimp.exe生成程序集的方法如下:"%PROGRAMFILES%\Microsoft SDKs\Windows\v7.1\bin\tlbimp.exe" %windir%\system32\UIAutomationCore.dll /out:interop.UIAutomationCore.dll

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接