问题标签 [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 回答
854 浏览

sendmessage - 将鼠标事件发送到非活动和隐藏的窗口/WPF 窗体

我正在开发一个需要在 Win32/WPF 窗口上生成鼠标事件的应用程序,该事件可能会在桌面上被最小化或隐藏。

我已经尝试过 user32.dll APIs SendInput、SendMessage、PostMessage 等。这些只有当窗口在桌面上可见时才有效。您知道任何适用于隐藏/非活动窗口的方法吗?

我也尝试过 .NET 的 UI 自动化库。在这种情况下,将一个窗口带到前面,或者我无法获得控件的可点击点。

有什么想法可以继续吗?如果我可以继续?

0 投票
0 回答
926 浏览

c# - 未从 PowerPoint 2007 捕获的 UI 自动化事件

当用户选择新的功能区选项卡时,我正在尝试从 PowerPoint 2007(或理想的任何版本)中捕获 UI 自动化事件。使用 SDK 工具 Inspect 和 AccEvent 我已经确定捕获这些事件的合理“父”元素是“Ribbon Tabs”元素。

当我将 AccEvent 限定到该元素,并在自动化事件中注册 SelectionItem_ElementSelected 时,我得到了我所期望的事件 - 单击选项卡时,AccEvent 捕获并记录它。

我只被允许发布两个链接并且还不能内嵌图像,所以我做了一些马赛克来尝试将尽可能多的相关信息压缩到每个链接中,这里是与上述行为相关的链接:

http://hirstius.com/media/stackoverflow/UIA_sdk_tools.png

基于此,我想出了以下代码来从我的程序中捕获这些事件:

这段代码没有任何结果。

如果我订阅顶级“窗口”,仍然没有。

如果我只是订阅顶级自动化元素,我会得到预期的事件 - 但有一个问题。在 AccEvent 中,事件仅在单击选项卡时出现,真正“被选中”。当我绑定到 Root AutomationElement 时,我在鼠标悬停/悬停时得到事件,而在单击时什么也没有。我只需要在实际选择选项卡时才出现事件(这正是 AccEvent 在作用于“功能区选项卡”元素时呈现的行为)。

结果链接:http ://hirstius.com/media/stackoverflow/UIA_Result.png

当用户在功能区上选择一个新选项卡时,我需要一种方法来通知我的 .NET 应用程序,我是否遗漏了一些明显的东西?

0 投票
0 回答
167 浏览

asp-classic - UIAutomation 在 CodeCharge 4.3 中自动化软件构建/发布 - SendKeys 的简单健壮替代方案?

我正在尝试使用 CodeCharge 4.3 自动化在 Classic ASP 中实现的大型项目的构建/发布。

我知道 Classic ASP 是一种脚本语言,我们的应用程序本身并没有真正“编译”,但在发布过程中,CodeCharge ID 可以检测到已损坏的页面,不幸的是,这对我们来说是一个常见事件。我想将它连接到 TeamCity for CI。

CodeCharge 没有命令行界面,因此需要自动化 UI,

我一直在使用 .NET UIAutomation 类,并成功地让 IDE 加载、触发发布、从输出窗口捕获输出,然后退出。

为了触发发布,我使用http://inputsimulator.codeplex.com/发送 F9 按键。我对此并不完全满意,因为如果 CodeCharge 失去焦点,它就会倒下。有没有办法使用 UIAutomation 将 F9 按键发送到窗口,而不管它是否具有焦点?

发布也可以从工具栏、菜单或附加到树视图的上下文菜单中触发。我对这些中的任何一个都没有太多运气,因为这些元素似乎没有暴露出来。例如,使用inspect.exe,我可以找到工具栏(Name="Standard", Classname="CCSToolbarWindow"),但inspect.exe 或我的UIAutomation 应用程序都看不到它下面的任何内容。工具栏元素上唯一可用的模式 inspect.exe 是“IsLegacyIAccessiblePatternAvailable = True。我想我可能会在特定坐标处向工具栏发送左键单击事件,但这超出了我的范围。

我认为因为这个应用程序已经很老了,如果我要继续追求,我可能不得不看看非托管 UIAutomation 的东西,或者更深入地了解 Win32 API 或其他东西,但我希望有一个更简单的解决方案。

0 投票
1 回答
287 浏览

windbg - 给定来自 UISpy 和进程内存转储的 RuntimeId,我如何找到隐藏 UI 元素的原因?

有时,应用程序错误会生成带有 Z-Index 的隐藏 UI 控件,这意味着它位于其他 UI 元素之上。这个隐藏的窗格出现在屏幕的左上角,并阻止用户从任何最大化的窗口加载“文件”菜单。如果应用程序关闭,UI 元素就会消失。

使用 UISpy,我能够捕获有关元素的以下信息:

我还有一个在 WinDbg 中打开的应用程序的内存转储。如何找到使用 RuntimeID 引用 UI 元素的托管对象"42 21628486"?或者也许我可以搜索具有特定宽度的对象?

我希望通过找到托管对象,它会提供一些关于隐藏窗口原因的线索。

0 投票
1 回答
2493 浏览

microsoft-ui-automation - .net UIAutomation C++ 中的简单示例

我正在通过.Net 中的UIAuomation Clients API并且必须使用 C++ 而不是 C#。这是因为SendInput函数仅在 C++ 中可用,并且似乎是将鼠标点击发送到任何应用程序的最可靠方法(与此问题相同的问题:如何在没有实现任何模式的情况下操作控件?)。

现在,由于缺少有关 msdn 的文档,我正在努力使用 UIAutomation API 的 C++ 版本。有人可以告诉如何使用CreatePropertyCondition、 UIA_NamePropertyId 和“Windows Media Player”创建 PropertyCondition。

我总是进入这种if状态。该g_pAutomation变量工作正常,我能够很好地获得 RootElement。

一个简单的教程/示例(在 C++ 中)的链接也将非常有用。

谢谢

0 投票
1 回答
292 浏览

c# - 从服务中使用 UIAutomation

我有使用 UIAutomation 的代码,可以在控制台应用程序中找到,但我需要它作为服务运行。该服务负责确保 3 个 exes 在给定的机器上运行并且配置正确。用 C++ 编写的 exe 没有 COM 或 .net 入口点。

我尝试以在此运行时登录的同一用户身份运行该服务,尝试在打开交互 w/ 桌面位的情况下作为本地服务运行。我从来没有从

线。有人知道我需要做些什么不同的事情吗?

0 投票
1 回答
654 浏览

wpf - UI 自动化更改属性 IsEnabled 属性元素

我们正在将自定义进程注入到 WPF 进程中,并启用进程之间的命名管道进行通信。我想禁用主窗口,直到我完成我的注入过程。

我正在使用 UIAutomation 库来检查 wpf 窗口属性。 AutomationElement提供一种通过属性检查属性值的方法GetCurrentValue.

该方法的等价物是什么,SetCurrentValue以便我可以设置IsEnabledProperty

0 投票
1 回答
3434 浏览

wpf - 页面上的某些控件对于 MS UI 自动化不可见

我们有一个带有 StartPage.xaml 的应用程序,其中 TabControl 的控件模板定义了一些网格和堆栈面板。在 xaml 中间的那个模板中有一个 itemPresenter,它下面有一个堆栈面板。虽然它对用户来说工作得很好,但 MS UI 自动化只能看到项目展示器内的选项卡项目,而没有其他在模板中同一级别上定义的项目。我尝试在 MS UIA 看不到的堆栈面板中添加标准按钮,以检查这是否是与我们拥有的自定义用户控件相关的问题,但该标准按钮对于 MS UIA 也是不可见的。如果我使用 Snoop,我可以在模板层次结构的相应级别上的 snoop 树中查看模板中的所有元素。但是 MS UIA 仍然找不到它们。

阻止 MS UIA 在页面上找到它们的控件会出现什么问题?

0 投票
1 回答
541 浏览

c# - MS ui 自动化元素和 Web 应用程序

我想自动化一个 Web 应用程序。我已经在使用 microsoft ui 自动化库。我的问题是我在网页中找不到automationElements 的唯一标识符,automationIdproperty 始终为空。有什么帮助吗?

0 投票
5 回答
7380 浏览

.net - 可以为整个 WPF 4.0 应用禁用 UI 自动化吗?

我们正在开发一个内部使用的 WPF 4.0 应用程序。
在某些客户端上,由于 UI 自动化,我们遇到了巨大的性能问题(这些客户端安装了平板电脑服务笔、触控等软件)。

这是 WPF 4.0 的一个已知问题,例如:


我们已经能够在规格非常有限的机器上重现此问题。在这台机器上打开一个 WPF 窗口需要:

  • 00:00:02 - 未安装任何 UI 自动化触发软件
  • 00:01:41 - 安装了 UI 自动化触发软件(用于此测试的 RoboForm)
  • 00:00:09 - 安装了 UI 自动化触发软件,并应用了修补程序 KB2484841

如您所见,安装修补程序 KB2484841 是一个巨大的改进,但仍然不如没有安装 ui 自动化触发软件的运行速度。
此外,我们对在客户端安装哪些软件没有太多控制权,因此很难为所有客户端推出此修复程序。


因此,是否可以“关闭”整个 WPF 应用程序的 UI 自动化?我知道它可以在每个 UserControl 的基础上完成,但整个应用程序是否可能?

我已经尝试过这篇文章中提供的代码,但没有成功。


谢谢你的时间,
科恩