问题标签 [microsoft-ui-automation]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
5338 浏览

c# - UIAutomation 单击按钮而不使窗口获得焦点并且 GetCurrentPattern() 返回不支持的模式

我有一个窗口的句柄,我想要做的是单击它的名为“加载设置”的按钮。我有2个问题。

  • 我的第一个问题是当我在某个 InvokePattern 上调用 Invoke 时,它​​会使窗口成为焦点,这对我的应用程序来说是不可取的。
  • 我的第二个问题是可见的,并记录在以下代码末尾的注释中:

    /li>
0 投票
1 回答
1473 浏览

c++ - 如何使用 UIA 在 HEX 中获取 IUIAutomationElement 的窗口句柄?

我正在寻找一种方法来获取或创建 IUIAutomationElement 的 HWND 的文本表示,但是当我研究它时,我能找到的只是:

1)如何获取不透明的原生句柄

2) 如何通过原生句柄查找元素

我的目标可能吗?

感谢您抽出宝贵时间,感谢您提供的任何帮助。

0 投票
2 回答
4841 浏览

c# - 如何在特定屏幕坐标处使用 UIAutomation 在 3rd 方应用程序中获取控件的窗口自动化 ID

我正在使用 UIAutomation 并尝试获取 3rd 方应用程序中任何控件的窗口 ID。我想知道如何在屏幕上的特定坐标处找出控件的 ID。

示例:我在桌面上运行了计算器、记事本和 Word。他们都在运行并部分共享屏幕。我希望能够运行我的程序,然后单击屏幕上的任何位置并获取底层控件的窗口 ID(如果有任何在鼠标下)。

我需要使用什么来实现此功能。我知道我需要某种鼠标钩子,但真正的问题是如何在单击鼠标的屏幕上获取控件的窗口 ID(而不是窗口句柄)。

0 投票
1 回答
152 浏览

c++ - 如何编写进程外 MS UI 自动化客户端

我读过的关于 UIA 的大部分文档都称赞它能够在进程外使用,并且与进程外 MSAA 客户端相比具有显着的性能改进,但我似乎无法鼓起任何描述如何实际编写的文档你的客户以这种方式。

我猜这与你调用 CoCreateInstance 的方式有关,所以我尝试的第一件事是将参数从 CLSCTX_INPROC_SERVER 更改为 CLSCTX_LOCAL_SERVER,这导致“类未注册”错误,我还没有找到原因. 我需要额外的步骤吗?

感谢您的任何帮助。

0 投票
1 回答
987 浏览

c# - 在运行时从其他 C# 应用程序 (AutomationProperties.AutomationId) 设置 XAML 属性

给定2个应用程序:

  • 1 WPF应用程序,并非所有控件都有 AutomationId,我无法更改。此外,应用程序在运行时添加控件而不设置 AutomationId。
  • 1 个自动执行上述 WPF 应用程序的控制台应用程序

我需要它,因为我想在几乎相同的时间内访问所有元素。(在使用之前搜索自动化元素的时间似乎有很大不同(从毫秒到秒) - 取决于元素/和树层的数量)

我想在 WPF 运行时在控制台应用程序中设置 WPF 控件的 AutomationIds。很高兴知道,如果你能想到任何解决这个问题的方法!


我到目前为止所尝试的:

1.) 反思

错误消息:“'System.String' 类型的对象无法转换为'System.Windows.Automation.AutomationProperty' 类型”但我想交出一个值,而不是属性类型......

如果我改用以下内容,则不会引发错误,但不会更改 XAML

2.)直接

3.) DependencyObjectsDependencyProperties似乎也很有希望,但到目前为止我还没有提出解决方案。有人有这方面的经验吗??

0 投票
1 回答
836 浏览

windows - UIAutomation SetValue 不起作用

我正在使用 Windows UIAutomation 客户端 API,试图找到一个 UI 元素并更改其值。当我尝试更改文本值时,一切似乎都正常。但是,我无法更改任何数值。

例如,如果我尝试在 Windows Media Player 中设置音量滑块的值,我会在检查工具中收到以下错误:

我已经验证该控件已启用,而不是只读的。这是否意味着控件不支持 SetValue,或者我应该如何格式化我的数值?由于错误E_INVALIDARG似乎我只是错误地格式化了我的数值。

在此处输入图像描述

0 投票
0 回答
425 浏览

windows - IUIAutomationElement FindAll/FindAllBuildCache 在某些机器上给出 null

我正在使用 UI 自动化从窗口中获取元素。

使用以下 API 的
IUIAutomationElement::FindAll
IUIAutomationElement::FindAllBuildCache

这适用于大多数机器并在某些机器上返回 null,尽管 UIAutomation 元素被正确拾取。知道为什么它在某些机器上不起作用,尽管它们具有相同的操作系统和软件,只是硬件不同。

0 投票
0 回答
1338 浏览

c# - 设置 AutomationElement 可见性或任何其他属性

如何设置IsOffScreenMicrosoft UI 自动化AutomationElement对象的属性?

我需要隐藏自动化元素。

我只能找到方法TransformPatternResize但我的控件(ListView)不支持这种模式。

这有可能实现吗?我试过了WPF InspectorSnoop两者都无法更改此文本框的可见性属性。它是只读的。

更新

在 WPF 检查器中找到Visibility属性并且“Snoop (IsVisible is readonly, butVisibility” 有效),因此它们都可以更改元素的可见性。现在我知道这是可能的。

目前我正在尝试了解它是如何工作的。有可用的源代码,但它是相当大的应用程序。有没有更小的或任何可用的样品?

0 投票
0 回答
492 浏览

c# - 使用 UIAutomation 获取 ControlType.Spinner 元素的值

我获得了窗口和微调器对象:

然后我正在访问微调器 RangeValuePatterm:

我应该能够使用简单的:

修改它的值,但它不起作用。我收到“System.ArgumentOutOfRangeException”类型的异常 - 值大于最大值。(这是真的,但我不知道如何更改最大允许值......)。

我也不知道如何获得它的当前值,因为很简单:

无论输入什么值,总是返回 0。我可以简单地发送键来设置微调器的值,而不是通过 UIAutomation 访问它,但我不知道如何读取微调器的实际值→因此无法检查它是否正确。

0 投票
1 回答
1274 浏览

c# - 如何将不支持的模式添加到 AutomationElement?AutomationPeers 会更改被测应用程序吗?

以下自定义控件 ToggleButton 不支持 InvokePattern。

我可以做些什么来通过一些 UIA 模式执行 ToggleButton 的点击事件?


链接提供有关 AutomationPeer 和自定义控件的信息。但似乎我需要更改被测应用程序 (AUT) 才能使用这个定制的 AutomationPeer?! 允许您更改 AUT 的指南