Автоматизация пользовательского интерфейса C#: Current.Name возвращает пустую строку

Я хочу использовать System.Windows.Automation в моей программе на C#, чтобы сообщить о свойстве Name в FocusChangedEvent, как это делает 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) имя отправителя хорошо отображается для тех же элементов.

Как решить эту проблему? Любое направление будет оценено.

1 ответ

Я переключился на UIAComWrapper в моем проекте, и теперь мои результаты согласуются с AccEvent, и это также чувствует себя намного быстрее.

Различия между UIAComWrapper и UIAutomationClient изложены в другом вопросе SO: Разница между UIaComWrapper и UIAutomationCLient + UIAutomationType

Другие вопросы по тегам