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