【问题标题】:Can be instantiated the type AutomationElement given an AutomationId value?可以在给定 AutomationId 值的情况下实例化类型 AutomationElement 吗?
【发布时间】:2017-01-31 12:56:07
【问题描述】:

我想知道,在 .NET 中,(托管)Microsoft UI 自动化 框架是否提供了某种方法来实例化 AutomationElement 类型(给定 @987654323) @ 窗口的值,以这种方式抑制通过窗口句柄或其他类型的标识符搜索窗口的需要。

一个用 VB.NET 编写的伪示例来理解我的目的:

Dim automationId As Integer = 1504
Dim element As AutomationElement = AutomationElement.FromAutomationId(automationId)

【问题讨论】:

  • 我能找到的最好的是this。否则我会说构建你自己的类(如果可能的话)并隐藏/覆盖AutomationId 属性。然后,每当执行其设置器时,您将“窗口”/“控件”存储在全局共享列表/字典中。
  • @Visual Vincent 谢谢,我看到的“问题”是该解决方案是一种搜索方法,并且它需要一个 AutomationElement 来搜索其元素,这是一种昂贵的查找算法。我想知道是否存在一种更“直接”的方式来避免这一切。

标签: c# .net vb.net ui-automation


【解决方案1】:

嗯,不。任何自动化属性都是元素的属性。自动化元素不一定对应于 HWND(每个 HWND 都有一个自动化元素,但很少有自动化元素具有 HWND,尤其是在现代 UI 框架中),因此需要树遍历。此外,UI 自动化的好处是树遍历发生在提供者端,而不是在您的应用程序中,从而减少了跨进程调用的数量。

【讨论】:

    猜你喜欢
    • 2015-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多