我正在致力于自动化 Windows 应用程序。我正在使用 teststack 白色框架。我遇到了一个问题。这个程序有一个我看不到里面的“窗口”对象。白色显示其中没有控件。在 UI 自动化模式下运行时,Inspect.exe 内部也不显示任何控件。如果我将 Inspect 切换到 MSAA,它会看到里面的控件很好。无论如何,我是否可以使用 C# 中的 MSAA 来处理这些控件?
1 回答
如果您可以识别所需的 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=[全部]
这是沿着这些思路的另一个 SO 答案:
最后,作为 P/Invoke 的替代方案,您还可以使用 Tlbimp.exe 为 oleacc.dll 创建一个包装程序集,并通过它访问 MSAA 函数。我不确定这是否适用于 MSAA,但值得一试。
例如,这是我编写的一个 C# hello world 示例,它展示了如何使用 C# 中的 UI 自动化 COM 接口,使用由 Tlbimp.exe 创建的程序集:
如该文件中的注释所述,从 Windows 7.1 SDK 开始,使用 Tlbimp.exe 生成程序集如下所示:
"%PROGRAMFILES%\Microsoft SDKs\Windows\v7.1\bin\tlbimp.exe" %windir%\system32\UIAutomationCore.dll /out:interop.UIAutomationCore.dll