Поделиться через


Модель автоматизации пользовательского интерфейса и Microsoft Active Accessibility

ПримечаниеПримечание

Эта документация предназначена для разработчиков на платформе .NET Framework, которым требуется использовать управляемые классы UI Automation, определенные в пространстве имен System.Windows.Automation.Последние сведения о UI Automation см. на веб-странице Windows Automation API: UI Automation.

Microsoft Active Accessibility — предыдущее решение, обеспечивавшее доступность приложений. Microsoft UI Automation — это новая модель с поддержкой специальных возможностей для Microsoft Windows. Она отвечает требованиям продуктов с поддержкой специальных возможностей и средств автоматического тестирования. В UI Automation введено много усовершенствований по сравнению с Active Accessibility.

В этом разделе описываются основные возможности UI Automation и объясняется их отличие от Active Accessibility.

В этом разделе содержатся следующие подразделы.

  • Языки программирования
  • Поддержка в Windows Presentation Foundation
  • Серверы и клиенты
  • Элементы пользовательского интерфейса
  • Представления дерева и переходы между элементами
  • Роли и типы элементов управления
  • Состояния и свойства
  • События
  • Безопасность
  • Связанные разделы

Языки программирования

Active Accessibility строится на основе Component Object Model (COM) с поддержкой сдвоенных интерфейсов, поэтому доступна для программирования на C/C++, Microsoft Visual Basic 6.0 и языках скриптов. UI Automation (включая библиотеку клиентских поставщиков для стандартных элементов управления) написана в управляемом коде, и приложения-клиенты автоматизации пользовательского интерфейса проще всего программировать с использованием Microsoft Visual C# или Microsoft Visual Basic .NET. Поставщики автоматизации пользовательского интерфейса, представляющие собой реализации интерфейса, могут быть написаны в управляемом коде или C/C++.

Поддержка в Windows Presentation Foundation

Windows Presentation Foundation (WPF) — это новая модель создания пользовательских интерфейсов. Элементы WPF не имеют встроенной поддержки Active Accessibility; однако они поддерживают UI Automation, включая поддержку клиентов Active Accessibility с использованием моста. Только клиенты, написанные специально для UI Automation, могут использовать все преимущества средств специальных возможностей WPF, таких как обширная поддержка работы с текстом.

Серверы и клиенты

В Active Accessibility серверы и клиенты взаимодействуют напрямую, по большей части через серверную реализацию IAccessible.

В UI Automation основная служба находится между сервером (называемым поставщиком) и клиентом. Основная служба осуществляет вызовы интерфейсов, реализованных поставщиками, и предоставляет дополнительные службы, такие как создание уникальных идентификаторов среды выполнения для элементов. В клиентских приложениях используется библиотека функций для вызова службы UI Automation.

Поставщики автоматизации пользовательского интерфейса могут предоставлять информацию клиентам Active Accessibility, а серверы Active Accessibility могут предоставлять информацию приложениям-клиентам автоматизации пользовательского интерфейса. Однако, поскольку Active Accessibility не предоставляет так много информации, как UI Automation, две модели не являются полностью совместимыми.

Элементы пользовательского интерфейса

Active Accessibility представляет элементы UI либо как интерфейс IAccessible, либо как идентификатор дочернего элемента. Трудно сравнивать два указателя IAccessible, чтобы определить, ссылаются ли они на один элемент.

В UI Automation каждый элемент представлен в виде объекта AutomationElement. Сравнение выполняется с помощью оператора равенства или метода Equals, оба способа сравнивают уникальные идентификаторы элементов в среде выполнения.

Представления дерева и переходы между элементами

Элементы user interface (UI) на экране можно просматривать в виде структуры дерева с рабочим столом в качестве корня, окон приложений в качестве непосредственных дочерних элементов и элементов внутри приложений в качестве следующих потомков.

В Active Accessibility многие элементы автоматизации, которые не касаются конечных пользователей, представлены в дереве. Клиентским приложениям нужно просмотреть все элементы, чтобы определить, которые из них являются значимыми.

Приложения-клиенты автоматизации пользовательского интерфейса просматривают UI посредством фильтрованного представления. Представление содержит только представляющие интерес элементы — те, которые дают сведения пользователю или разрешают взаимодействие. Доступны предопределенные представления только элементов управления и только элементов содержимого; кроме того, приложения могут определять настраиваемые представления. UI Automation упрощает задачу описания UI для пользователя и оказания помощи пользователю при взаимодействии с приложением.

В Active Accessibility переход между элементами является либо пространственным (например, переход к элементу, который располагается слева на экране), либо логическим (например, переход к следующему элементу меню или следующему элементу в последовательности перехода в диалоговом окне), либо иерархическим (например, переход к первому дочернему элементу в контейнере или от дочернего элемента к родительскому). Иерархический переход осложняется тем, что дочерние элементы не всегда являются объектами, которые реализуют IAccessible.

В UI Automation все элементы UI являются объектами AutomationElement, поддерживающими те же основные функциональные возможности. (С точки зрения поставщика они являются объектами, которые реализуют интерфейс, унаследованный от IRawElementProviderSimple.) Переходы являются преимущественно иерархическими — от родительских элементов к дочерним и от одного одноуровневого родственного элемента к другому. (Переход между одноуровневыми элементами с общим родителем имеет логический элемент, так как он может следовать последовательности переходов.) С помощью класса TreeWalker можно перейти из любой начальной точки, используя любое фильтрованное представление дерева. Можно также перейти к конкретному дочернему элементу или потомкам с помощью FindFirst и FindAll; например, несложно получить все элементы в диалоговом окне, поддерживающем указанный шаблон элемента управления.

Переход в UI Automation является более последовательным, чем в Active Accessibility. Некоторые элементы, такие как раскрывающиеся списки и всплывающие окна, отображаются в дереве Active Accessibility дважды, и переход из них может привести к непредвиденным результатам. Фактически невозможно правильно реализовать Active Accessibility для элемента управления "Главная панель". UI Automation допускает переподчинение и изменение расположения, в результате чего элемент может быть помещен в любое место в дереве, независимо от иерархии, обусловленной правами владения окон.

Роли и типы элементов управления

accRole использует свойство Active Accessibility (IAccessible::get_actRole), чтобы получить описание роли элемента в UI, например ROLE_SYSTEM_SLIDER или ROLE_SYSTEM_MENUITEM. Роль элемента — это ключ к его доступным функциональным возможностям. Взаимодействие с элементом управления достигается с помощью фиксированных методов, таких как IAccessible::accSelect и IAccessible::accDoDefaultAction. Взаимодействие между клиентским приложением и UI ограничено тем, что можно сделать с помощью IAccessible.

Напротив, UI Automation во многом отделяет тип элемента управления элемента (описанный свойством ControlType) от его ожидаемой функциональности. Функциональные возможности определяются шаблонами элементов управления, которые поддерживаются поставщиком в его реализации специализированных интерфейсов. Шаблоны элементов управления можно объединить для описания полного набора функциональных возможностей, поддерживаемых конкретным элементом UI. Некоторые поставщики обязаны поддерживать определенный шаблон элемента управления; например, поставщик для элемента управления "Флажок" должен поддерживать шаблон элемента управления Toggle. Другие поставщики должны поддерживать один или несколько наборов шаблонов элементов управления; например, элемент управления "Кнопка" должен поддерживать либо Toggle, либо Invoke. Есть поставщики, которые вообще не поддерживают шаблоны элементов управления; например, элемент управления "Область" не имеет шаблонов элементов управления и не может быть перемещен, закреплен или изменен в размере.

UI Automation поддерживает пользовательские элементы управления, которые определяются свойством Custom и могут быть описаны свойством LocalizedControlTypeProperty.

В следующей таблице показано сопоставление ролей Active Accessibility типам элементов управления UI Automation.

Роль Active Accessibility

Тип элемента управления UI Automation

ROLE_SYSTEM_PUSHBUTTON

Кнопка

ROLE_SYSTEM_CLIENT

Календарь

ROLE_SYSTEM_CHECKBUTTON

Флажок

ROLE_SYSTEM_COMBOBOX

Поле со списком

ROLE_SYSTEM_CLIENT

Пользовательское

ROLE_SYSTEM_LIST

Таблица данных

ROLE_SYSTEM_LISTITEM

Элемент данных

ROLE_SYSTEM_DOCUMENT

Документ

ROLE_SYSTEM_TEXT

Edit

ROLE_SYSTEM_GROUPING

Группа

ROLE_SYSTEM_LIST

Заголовок

ROLE_SYSTEM_COLUMNHEADER

Элемент заголовка

ROLE_SYSTEM_LINK

Гиперссылка

ROLE_SYSTEM_GRAPHIC

Изображение

ROLE_SYSTEM_LIST

Список

ROLE_SYSTEM_LISTITEM

Элемент списка

ROLE_SYSTEM_MENUPOPUP

Меню

ROLE_SYSTEM_MENUBAR

Строка меню

ROLE_SYSTEM_MENUITEM

Элемент меню

ROLE_SYSTEM_PANE

Область

ROLE_SYSTEM_PROGRESSBAR

Индикатор выполнения

ROLE_SYSTEM_RADIOBUTTON

Переключатель

ROLE_SYSTEM_SCROLLBAR

Полоса прокрутки

ROLE_SYSTEM_SEPARATOR

Разделитель

ROLE_SYSTEM_SLIDER

Ползунок

ROLE_SYSTEM_SPINBUTTON

Циклический счетчик

ROLE_SYSTEM_SPLITBUTTON

Разворачивающаяся кнопка

ROLE_SYSTEM_STATUSBAR

Строка состояния

ROLE_SYSTEM_PAGETABLIST

Вкладка

ROLE_SYSTEM_PAGETAB

Элемент вкладки

ROLE_SYSTEM_TABLE

Таблица

ROLE_SYSTEM_STATICTEXT

Текст

ROLE_SYSTEM_INDICATOR

Бегунок

ROLE_SYSTEM_TITLEBAR

Заголовок окна

ROLE_SYSTEM_TOOLBAR

Панель инструментов

ROLE_SYSTEM_TOOLTIP

Подсказка

ROLE_SYSTEM_OUTLINE

Дерево

ROLE_SYSTEM_OUTLINEITEM

Элемент дерева

ROLE_SYSTEM_WINDOW

Окно

Дополнительные сведения о различных типах элементов управления см. в разделе Типы элементов управления автоматизации пользовательского интерфейса.

Состояния и свойства

В Active Accessibility элементы поддерживают общий набор свойств, и некоторые свойства (такие как accState) должны содержать разные описания в зависимости от роли элемента. Серверы должны реализовать все методы IAccessible, возвращающие свойство, даже те, которые не являются значимыми для элемента.

UI Automation определяет множество других свойств, некоторые из которых соответствует состояниям в Active Accessibility. Некоторые являются общими для всех элементов, а остальные — специфичными для типов элементов управления и шаблонов элементов управления. Свойства различаются по уникальным идентификаторам, и большая часть свойств может быть получена с помощью единственного метода GetCurrentPropertyValue или GetCachedPropertyValue. Многие свойства легко извлекаются из методов доступа к свойствам Current и Cached.

Поставщику автоматизации пользовательского интерфейса не нужно реализовать незначимые свойства, он может просто возвращать значение null для всех неподдерживаемых свойств. Кроме того, основная служба UI Automation может получить некоторые свойства от поставщика окна по умолчанию, и они объединяются со свойствами, явно реализованными поставщиком.

UI Automation поддерживает множество дополнительных свойств, а также обеспечивает лучшую производительность, позволяя извлечение нескольких свойств с помощью одного вызова между процессами.

В следующей таблице показано соответствие свойств в двух моделях.

Метод доступа к свойству Active Accessibility

Идентификатор свойства UI Automation

Примечания

get_accKeyboardShortcut

AccessKeyProperty или AcceleratorKeyProperty

AccessKeyProperty имеет приоритет при наличии обоих.

get_accName

NameProperty

get_accRole

ControlTypeProperty

См. в предыдущей таблице сопоставление ролей с типами элементов управления.

get_accValue

ValuePattern.ValueProperty

RangeValuePattern.ValueProperty

Действительно только для типов элементов управления, которые поддерживают ValuePattern или RangeValuePattern. Значения RangeValue нормализованы от 0 до 100 для согласования с поведением MSAA. Элементы Value используют строку.

get_accHelp

HelpTextProperty

accLocation

BoundingRectangleProperty

get_accDescription

Не поддерживается в UI Automation.

Для accDescription не было определено четкой спецификации внутри MSAA, в результате чего поставщики помещают в это свойство различные фрагменты информации.

get_accHelpTopic

Не поддерживается в UI Automation.

В следующей таблице показано, какие свойства UI Automation соответствуют константам состояния Active Accessibility.

Состояние Active Accessibility

Свойство UI Automation

Вызывает изменение состояния?

STATE_SYSTEM_CHECKED

Для флажка: ToggleStateProperty

Для переключателя: IsSelectedProperty

Y

STATE_SYSTEM_COLLAPSED

ExpandCollapseState = Collapsed

Y

STATE_SYSTEM_EXPANDED

ExpandCollapseState = Expanded или PartiallyExpanded

Y

STATE_SYSTEM_FOCUSABLE

IsKeyboardFocusableProperty

N

STATE_SYSTEM_FOCUSED

HasKeyboardFocusProperty

N

STATE_SYSTEM_HASPOPUP

ExpandCollapsePattern для элементов меню

N

STATE_SYSTEM_INVISIBLE

IsOffscreenProperty = True и GetClickablePoint вызывает NoClickablePointException

N

STATE_SYSTEM_LINKED

ControlTypeProperty =

Hyperlink

N

STATE_SYSTEM_MIXED

ToggleState = Indeterminate

N

STATE_SYSTEM_MOVEABLE

CanMoveProperty

N

STATE_SYSTEM_MUTLISELECTABLE

CanSelectMultipleProperty

N

STATE_SYSTEM_OFFSCREEN

IsOffscreenProperty = True

N

STATE_SYSTEM_PROTECTED

IsPasswordProperty

N

STATE_SYSTEM_READONLY

RangeValuePattern.IsReadOnlyProperty и ValuePattern.IsReadOnlyProperty.

N

STATE_SYSTEM_SELECTABLE

SelectionItemPattern поддерживается

N

STATE_SYSTEM_SELECTED

IsSelectedProperty

N

STATE_SYSTEM_SIZEABLE

CanResize

N

STATE_SYSTEM_UNAVAILABLE

IsEnabledProperty

Y

Следующие состояния либо не были реализованы большинством серверов элементов управления Active Accessibility, либо не имеют эквивалента в UI Automation.

Состояние Active Accessibility

Примечания

STATE_SYSTEM_BUSY

Недоступно в UI Automation

STATE_SYSTEM_DEFAULT

Недоступно в UI Automation

STATE_SYSTEM_ANIMATED

Недоступно в UI Automation

STATE_SYSTEM_EXTSELECTABLE

Нет широкой реализации серверами Active Accessibility

STATE_SYSTEM_MARQUEED

Нет широкой реализации серверами Active Accessibility

STATE_SYSTEM_SELFVOICING

Нет широкой реализации серверами Active Accessibility

STATE_SYSTEM_TRAVERSED

Недоступно в UI Automation

STATE_SYSTEM_ALERT_HIGH

Нет широкой реализации серверами Active Accessibility

STATE_SYSTEM_ALERT_MEDIUM

Нет широкой реализации серверами Active Accessibility

STATE_SYSTEM_ALERT_LOW

Нет широкой реализации серверами Active Accessibility

STATE_SYSTEM_FLOATING

Нет широкой реализации серверами Active Accessibility

STATE_SYSTEM_HOTTRACKED

Недоступно в UI Automation

STATE_SYSTEM_PRESSED

Недоступно в UI Automation

Полный список идентификаторов свойств UI Automation см. в разделе Общие сведения о свойствах автоматизированного пользовательского интерфейса.

События

Механизм событий в UI Automation, в отличие от механизма в Active Accessibility, не полагается на маршрутизацию событий Windows (которая тесно связана с дескрипторами окон) и не требует, чтобы клиентское приложение устанавливало подключение. Возможна точная настройка подписок на события не только для конкретных событий, но и для конкретных частей дерева. Поставщики могут также управлять вызовами событий, проверяя, какие именно события отслеживаются.

Для клиентов проще извлекать элементы, вызывающие события, когда они передаются непосредственно по обратному вызову события. Свойства элемента автоматически кэшируются, если запрос кэша был активен, когда клиент подписался на событие.

В следующей таблице показано соответствие событий WinEvent Active Accessibility и событий UI Automation.

WinEvent

Идентификатор события UI Automation

EVENT_OBJECT_ACCELERATORCHANGE

Изменение свойства AcceleratorKeyProperty

EVENT_OBJECT_CONTENTSCROLLED

Изменение свойства VerticalScrollPercentProperty или HorizontalScrollPercentProperty на связанных полосах прокрутки

EVENT_OBJECT_CREATE

StructureChangedEvent

EVENT_OBJECT_DEFACTIONCHANGE

Нет эквивалента

EVENT_OBJECT_DESCRIPTIONCHANGE

Нет точного эквивалента; возможно, изменение свойства HelpTextProperty или LocalizedControlTypeProperty

EVENT_OBJECT_DESTROY

StructureChangedEvent

EVENT_OBJECT_FOCUS

AutomationFocusChangedEvent

EVENT_OBJECT_HELPCHANGE

Изменение HelpTextProperty

EVENT_OBJECT_HIDE

StructureChangedEvent

EVENT_OBJECT_LOCATIONCHANGE

Изменение свойства BoundingRectangleProperty

EVENT_OBJECT_NAMECHANGE

Изменение свойства NameProperty

EVENT_OBJECT_PARENTCHANGE

StructureChangedEvent

EVENT_OBJECT_REORDER

Несогласованно используется в Active Accessibility. Нет непосредственного соответствующего события, определенного в UI Automation.

EVENT_OBJECT_SELECTION

ElementSelectedEvent

EVENT_OBJECT_SELECTIONADD

ElementAddedToSelectionEvent

EVENT_OBJECT_SELECTIONREMOVE

ElementRemovedFromSelectionEvent

EVENT_OBJECT_SELECTIONWITHIN

Нет эквивалента

EVENT_OBJECT_SHOW

StructureChangedEvent

EVENT_OBJECT_STATECHANGE

Различные события изменения свойств

EVENT_OBJECT_VALUECHANGE

Изменение RangeValuePattern.ValueProperty и ValuePattern.ValueProperty

EVENT_SYSTEM_ALERT

Нет эквивалента

EVENT_SYSTEM_CAPTUREEND

Нет эквивалента

EVENT_SYSTEM_CAPTURESTART

Нет эквивалента

EVENT_SYSTEM_CONTEXTHELPEND

Нет эквивалента

EVENT_SYSTEM_CONTEXTHELPSTART

Нет эквивалента

EVENT_SYSTEM_DIALOGEND

WindowClosedEvent

EVENT_SYSTEM_DIALOGSTART

WindowOpenedEvent

EVENT_SYSTEM_DRAGDROPEND

Нет эквивалента

EVENT_SYSTEM_DRAGDROPSTART

Нет эквивалента

EVENT_SYSTEM_FOREGROUND

AutomationFocusChangedEvent

EVENT_SYSTEM_MENUEND

MenuClosedEvent

EVENT_SYSTEM_MENUPOPUPEND

MenuClosedEvent

EVENT_SYSTEM_MENUPOPUPSTART

MenuOpenedEvent

EVENT_SYSTEM_MENUSTART

MenuOpenedEvent

EVENT_SYSTEM_MINIMIZEEND

Изменение свойства WindowVisualStateProperty

EVENT_SYSTEM_MINIMIZESTART

Изменение свойства WindowVisualStateProperty

EVENT_SYSTEM_MOVESIZEEND

Изменение свойства BoundingRectangleProperty

EVENT_SYSTEM_MOVESIZESTART

Изменение свойства BoundingRectangleProperty

EVENT_SYSTEM_SCROLLINGEND

Изменение свойства VerticalScrollPercentProperty или HorizontalScrollPercentProperty

EVENT_SYSTEM_SCROLLINGSTART

Изменение свойства VerticalScrollPercentProperty или HorizontalScrollPercentProperty

EVENT_SYSTEM_SOUND

Нет эквивалента

EVENT_SYSTEM_SWITCHEND

Нет эквивалента, но событие AutomationFocusChangedEvent сигнализирует, что новое приложение получило фокус

EVENT_SYSTEM_SWITCHSTART

Эквивалент отсутствует

Эквивалент отсутствует

Изменение свойства CurrentViewProperty

Эквивалент отсутствует

Изменение свойства HorizontallyScrollableProperty

Эквивалент отсутствует

Изменение свойства VerticallyScrollableProperty

Эквивалент отсутствует

Изменение свойства HorizontalScrollPercentProperty

Эквивалент отсутствует

Изменение свойства VerticalScrollPercentProperty

Эквивалент отсутствует

Изменение свойства HorizontalViewSizeProperty

Эквивалент отсутствует

Изменение свойства VerticalViewSizeProperty

Эквивалент отсутствует

Изменение свойства ToggleStateProperty

Эквивалент отсутствует

Изменение свойства WindowVisualStateProperty

Эквивалент отсутствует

Событие AsyncContentLoadedEvent

Эквивалент отсутствует

ToolTipOpenedEvent

Безопасность

Некоторые сценарии настройки IAccessible требуют переноса базового IAccessible и его вызова. Это влияет на безопасность, поскольку компонент с частичным доверием не должен быть посредником на пути кода.

В модели UI Automation исключается необходимость вызова поставщиками кода другого поставщика. Основная служба UI Automation выполняет все необходимое агрегирование.

См. также

Другие ресурсы

Основы модели автоматизации пользовательского интерфейса