Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Замечание
Эта документация предназначена для разработчиков .NET Framework, которые хотят использовать управляемые классы автоматизации пользовательского интерфейса, определенные в пространстве имен System.Windows.Automation. Последние сведения об автоматизации пользовательского интерфейса см. в разделе API автоматизации Windows: автоматизация пользовательского интерфейса.
В этом разделе описаны различные способы получения AutomationElement объектов для элементов пользовательского интерфейса.
Предостережение
Если клиентское приложение может попытаться найти элементы в собственном пользовательском интерфейсе, необходимо выполнить все вызовы автоматизации пользовательского интерфейса в отдельном потоке. Дополнительные сведения см. в разделе «Проблемы многопоточности автоматизации пользовательского интерфейса».
Корневой элемент
Все поиски AutomationElement объектов должны иметь начальное место. Это может быть любой элемент, включая рабочий стол, окно приложения или элемент управления.
Корневой элемент для рабочего стола, из которого нисходят все элементы, получается из статического AutomationElement.RootElement свойства.
Предостережение
Как правило, следует попытаться получить только прямые потомки элемента RootElement. Поиск потомков может проходить через сотни или даже тысячи элементов, что может привести к переполнению стека. Если вы пытаетесь получить определенный элемент на более низком уровне, необходимо начать поиск из окна приложения или из контейнера на более низком уровне.
Условия
Для большинства методов, которые можно использовать для получения элементов автоматизации пользовательского интерфейса, необходимо указать Conditionнабор критериев, определяющих элементы, которые требуется извлечь.
Самым простым условием является TrueConditionпредопределенный объект, указывающий, что возвращаются все элементы в области поиска. FalseCondition, противоположность TrueCondition, является менее полезным, так как это предотвратит поиск любых элементов.
Три других предопределенных условия можно использовать только или в сочетании с другими условиями: ContentViewCondition, ControlViewConditionи RawViewCondition. RawViewCondition, используемый самим собой, эквивалентен TrueConditionтому, что он не фильтрует элементы по их IsControlElement свойствам или IsContentElement свойствам.
Другие условия создаются из одного или нескольких PropertyCondition объектов, каждый из которых задает значение свойства. Например, PropertyCondition может указывать, что элемент включен или поддерживает определенный паттерн элемента управления.
Условия можно комбинировать с помощью логики булева алгебры, создавая объекты типов AndCondition, OrCondition, NotCondition.
Область поиска
Поиски, выполненные с помощью FindFirst или FindAll должны иметь область, а также начальное место.
Область определяет пространство вокруг начальной точки, которое должно быть исследовано. Это может включать сам элемент, его братья и сестры, его родитель, его предки, его непосредственные дети и его потомки.
Область поиска определяется побитовой комбинацией значений из TreeScope перечисления.
Поиск известного элемента
Чтобы найти известный элемент, определяемый его NameAutomationIdили другим свойством или сочетанием свойств, проще всего использовать FindFirst метод. Если искомый элемент является окном приложения, начальной точкой поиска может быть RootElement.
Этот способ поиска элементов автоматизации пользовательского интерфейса наиболее полезен в сценариях автоматического тестирования.
Поиск элементов в поддереве
Чтобы найти все элементы, отвечающие определенным критериям, связанным с известным элементом, можно использовать FindAll. Например, этот метод можно использовать для извлечения элементов списка или элементов меню из списка или меню, а также для идентификации всех элементов управления в диалоговом окне.
Обход поддерева
Если у вас нет предварительного знания о приложениях, с которыми может использоваться ваш клиент, можно создать поддерев всех элементов, интересующих вас, с помощью TreeWalker класса. Приложение может сделать это в ответ на событие, связанное с изменением фокуса; то есть, когда приложение или элемент управления получает фокус ввода, клиент автоматизации пользовательского интерфейса проверяет дочерние элементы и, возможно, всех потомков выделенного элемента.
Другой способ использования TreeWalker, позволяющий определить предков элемента. Например, двигаясь по дереву, можно определить родительское окно элемента управления.
Можно использовать TreeWalker либо путем создания объекта класса, передавая Condition для определения интересующих элементов, либо использовать один из следующих предопределенных объектов, которые определены как поля TreeWalker.
| Поле | Описание |
|---|---|
| ContentViewWalker | Находит только элементы, у которых свойство IsContentElement равно true. |
| ControlViewWalker | Находит только элементы, у которых свойство IsControlElement равно true. |
| RawViewWalker | Находит все элементы. |
После получения TreeWalker, использование его просто. Просто вызовите эти методы Get для перехода между элементами поддерева.
Метод Normalize можно использовать для перехода к элементу в поддереве из другого элемента, который не является частью представления. Например, предположим, что вы создали представление поддерев с помощью ContentViewWalker. Затем ваше приложение получает уведомление о том, что полоса прокрутки получила фокус ввода. Поскольку полоса прокрутки не является элементом содержимого, она отсутствует в вашем представлении поддерева. Однако вы можете передать AutomationElement, представляющий полосу прокрутки, в Normalize и получить ближайшего предка, который находится в представлении содержимого.
Другие способы извлечения элемента
Помимо поиска и навигации, вы можете получить AutomationElement следующими способами.
Из события
Когда приложение получает событие автоматизации пользовательского интерфейса, исходный объект, переданный обработчику событий, является AutomationElement. Например, если вы подписаны на события с изменением фокуса, элемент, получающий фокус, является источником, переданным вашей AutomationFocusChangedEventHandler.
Дополнительные сведения см. в разделе "Подписка на события автоматизации пользовательского интерфейса".
Из точки
Если у вас есть координаты экрана (например, положение курсора), можно получить объект AutomationElement с помощью статического метода FromPoint.
Из дескриптора окна
Чтобы получить AutomationElement из HWND, используйте статический FromHandle метод.
Из раздела «Фокусированное управление»
Вы можете получить объект AutomationElement, представляющий фокусированный элемент управления, из статического свойства FocusedElement.