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

Примечание.

Эта документация предназначена для разработчиков .NET Framework, желающих использовать управляемые классы автоматизации пользовательского интерфейса, определенные в пространстве имен System.Windows.Automation. Последние сведения об автоматизации пользовательского интерфейса см. в статье API автоматизации Windows. Автоматизация пользовательского интерфейса.

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

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

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

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

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

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

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

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

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

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

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

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

В модель автоматизации пользовательского интерфейса каждый элемент представлен как AutomationElement объект. Сравнение выполняется с помощью оператора равенства или метода Equals ; в обоих способах сравниваются уникальные идентификаторы среды выполнения элементов.

Представления в виде дерева и навигация

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

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

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

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

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

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

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

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

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

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

В следующей таблице показано сопоставление ролей "Активные специальные возможности" с типами элементов управления модель автоматизации пользовательского интерфейса.

Роль "Активные специальные возможности" тип элемента управления модель автоматизации пользовательского интерфейса
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 Редактировать
ROLE_SYSTEM_GROUPING Групповой
ROLE_SYSTEM_LIST Верхний колонтитул
ROLE_SYSTEM_COLUMNHEADER Элемент заголовка
ROLE_SYSTEM_LINK Гиперссылка
ROLE_SYSTEM_GRAPHIC Изображения
ROLE_SYSTEM_LIST 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 Панель инструментов
Tool barROLE_SYSTEM_TOOLTIP Подсказка
ROLE_SYSTEM_OUTLINE декомпозиции
ROLE_SYSTEM_OUTLINEITEM Элемент дерева
ROLE_SYSTEM_WINDOW Окно

Дополнительные сведения о разных типах элементов управления см. в разделе UI Automation Control Types.

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

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

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

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

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

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

Метод доступа к свойству Active Accessibility идентификатор свойства модель автоматизации пользовательского интерфейса Замечания
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 Не поддерживается в модель автоматизации пользовательского интерфейса accDescription не имеет четкой спецификации в MSAA, в результате чего поставщики помещают в это свойство разные части сведений.
get_accHelpTopic Не поддерживается в модель автоматизации пользовательского интерфейса

В следующей таблице показано, какие свойства модель автоматизации пользовательского интерфейса соответствуют константам состояния "Активные специальные возможности".

Активное состояние специальных возможностей свойство модель автоматизации пользовательского интерфейса Вызывает изменение состояния?
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

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

Активное состояние специальных возможностей Замечания
STATE_SYSTEM_BUSY Недоступно в модель автоматизации пользовательского интерфейса
STATE_SYSTEM_DEFAULT Недоступно в модель автоматизации пользовательского интерфейса
STATE_SYSTEM_ANIMATED Недоступно в модель автоматизации пользовательского интерфейса
STATE_SYSTEM_EXTSELECTABLE Не широко реализованы серверами активных специальных возможностей
STATE_SYSTEM_MARQUEED Не широко реализованы серверами активных специальных возможностей
STATE_SYSTEM_SELFVOICING Не широко реализованы серверами активных специальных возможностей
STATE_SYSTEM_TRAVERSED Недоступно в модель автоматизации пользовательского интерфейса
STATE_SYSTEM_ALERT_HIGH Не широко реализованы серверами активных специальных возможностей
STATE_SYSTEM_ALERT_MEDIUM Не широко реализованы серверами активных специальных возможностей
STATE_SYSTEM_ALERT_LOW Не широко реализованы серверами активных специальных возможностей
STATE_SYSTEM_FLOATING Не широко реализованы серверами активных специальных возможностей
STATE_SYSTEM_HOTTRACKED Недоступно в модель автоматизации пользовательского интерфейса
STATE_SYSTEM_PRESSED Недоступно в модель автоматизации пользовательского интерфейса

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

События

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

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

В следующей таблице показано соответствие активных событий WinEvents и модель автоматизации пользовательского интерфейса специальных возможностей.

WinEvent идентификатор события модель автоматизации пользовательского интерфейса
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 Не всегда используется в активной читаемости. В модель автоматизации пользовательского интерфейса не определено непосредственно соответствующее событие.
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 и вызов через него. Это влияет на безопасность, поскольку частично доверенный компонент не должен быть посредником на пути кода.

Модель модель автоматизации пользовательского интерфейса удаляет необходимость вызова поставщиков к другому коду поставщика. Базовая служба модель автоматизации пользовательского интерфейса выполняет все необходимые агрегаты.

См. также