首页 > 解决方案 > C# UI 自动化:Current.Name 返回空字符串

问题描述

我想在我的 C# 程序中使用 System.Windows.Automation 来报告 FocusChangedEvent 上的 Name 属性,就像 AccEvent.exe 一样。

我有一个简单的控制台应用程序,它应该在 FocusChangedEvent 被触发时显示发件人的姓名:

Automation.AddAutomationFocusChangedEventHandler((sender, e) => {
    AutomationElement element = sender as AutomationElement;
        if (element != null)
            {
                Console.WriteLine(element.Current.Name);
            }
        });

这主要按我的预期工作。在窗口和窗口中的元素之间切换我的焦点会显示焦点元素的名称。但是对于很多元素, Name 属性返回空字符串 ("")

使用 AccEvent.exe (UIA FocusEvent) 检查,对于相同的元素,发件人名称显示良好。

如何解决这个问题?任何方向将不胜感激。

标签: c#eventsui-automationuia

解决方案


我在我的项目中切换到 UIAComWrapper,现在我的结果与 AccEvent 一致,而且感觉也快得多。

UIAComWrapper 和 UIAutomationClient 之间的差异在另一个 SO 问题中说明: UIaComWrapper 和 UIAutomationCLient + UIAutomationType 之间的差异


推荐阅读