【问题标题】:Retrieve Patterns from UI Automation COM API从 UI 自动化 COM API 检索模式
【发布时间】:2011-11-10 17:57:50
【问题描述】:

我开发了一个使用 UI 自动化托管库的应用程序。性能非常慢,所以我转而使用带有包装器的 UI 自动化 COM API:http://uiacomwrapper.codeplex.com/

我遇到了一个用于返回 ValuePattern 的 AutomationElement 不再这样做的问题。当我使用 UISpy 时,我发现它也确实找到了 ValuePattern。这是API,包装器的问题吗?我可以做些什么来让它使用 COM API 工作。 (我真的不想再使用托管库了)

谢谢

【问题讨论】:

  • 你能用当前版本的inspect32.exe看到值模式吗? (Inspect 来自 Windows SDK,并根据模式显示 MSAA 或 UIA 元素。它是非托管的,因此将显示与使用 COM 一致的视图,而 UISpy 是托管的。据我所知,托管和托管之间存在一些差异非托管版本。您知道您遇到此问题的 UI 类型(例如 winforms 按钮、常用控件列表视图等)吗?
  • 感谢 Brendan 的回复,我正在检索 UltraGrid 中一行的列元素。 (我相信它是基于应用程序的旧版 UltraGrid) 主窗口显示为 Win32,所以我猜它一定是在 .NET 之前创建的。至于检查工具,我不认为它是作为 SDK 的一部分安装的,是否有单独的下载?
  • 没关系,我认为是网络安装程序出现了问题。我现在正在尝试从 DVD iso 安装它。
  • BrendanMck,它没有显示值模式,但检查器工具显示的是 LegacyIAccessiblePattern,它的 value 属性恰好是我正在寻找的。奇怪的是,当我运行 GetSupportedPatterns 时它没有返回它......无论如何,请添加您的评论作为答案,以便我接受它。谢谢!

标签: c# winapi user-interface automation


【解决方案1】:

您能否使用当前版本的 inspect32.exe 查看值模式? Inspect 来自 Windows SDK,并根据模式显示 MSAA 或 UIA 元素。它是非托管的,因此将显示与使用 COM 一致的视图,而 UISpy 是托管的。据我记得,托管版本和非托管版本之间存在一些差异。您知道您遇到此问题的 UI 类型(例如 winforms 按钮、常用控件列表视图等)吗?

我的猜测是,这里发生的事情是 UltraGrid 可能具有 MSAA/IAccessible 实现。 UIA 尝试将其转换为适当的 UIA 模式 - 但 UIA 对此的支持在其托管版本和非托管版本中略有不同 - 特别是托管版本非常慢!在任何情况下,UIA 的非托管版本都允许您通过 LegacyIAccessiblePattern 深入了解底层 MSAA 实现,因此您可以从那里获取值。

【讨论】:

    猜你喜欢
    • 2013-08-23
    • 1970-01-01
    • 2011-02-07
    • 2012-02-29
    • 2020-07-28
    • 1970-01-01
    • 2014-10-23
    • 2016-01-05
    • 2015-12-14
    相关资源
    最近更新 更多