модель автоматизации пользовательского интерфейса и активные специальные возможности
Microsoft Active Accessibility — это устаревший API, который был представлен в Windows 95 и предназначен для обеспечения доступности приложений Windows. Корпорация Майкрософт модель автоматизации пользовательского интерфейса — это новая модель специальных возможностей для Windows, предназначенная для решения потребностей вспомогательных технологий и автоматизированных средств тестирования. модель автоматизации пользовательского интерфейса предлагает множество улучшений по сравнению со специальными возможностями Microsoft Active. В этом разделе описываются различия между двумя технологиями.
Эта тема описана в следующих разделах.
- Языки программирования
- Серверы и клиенты
- Элементы пользовательского интерфейса
- Представления дерева и навигация
- Роли и типы элементов управления
- Состояния и свойства
- События
- Доступ к активным свойствам и объектам специальных возможностей из модель автоматизации пользовательского интерфейса
- Связанные статьи
Языки программирования
Microsoft Active Специальные возможности основаны на объектной модели компонента (COM) с поддержкой двух интерфейсов и, следовательно, программируются на языках C/C++ и скриптов.
При внедрении модель автоматизации пользовательского интерфейса клиентский API был ограничен управляемым кодом, а API поставщика включал как управляемые, так и неуправляемые реализации. В Windows 7 появился новый КЛИЕНТСКИй API на основе COM, чтобы упростить программу модель автоматизации пользовательского интерфейса клиентских приложений в C/C++.
Серверы и клиенты
В Microsoft Active Accessibility серверы и клиенты взаимодействуют напрямую через реализацию сервера интерфейса IAccess .
В модель автоматизации пользовательского интерфейса основная служба находится между сервером (поставщиком) и клиентом. Основная служба вызывает интерфейсы, реализованные поставщиками, и предоставляет дополнительные службы, такие как создание уникальных идентификаторов времени выполнения для элементов пользовательского интерфейса. Клиентские приложения получают доступ к этой основной службе, создавая объект CUIAutomation . Этот объект поддерживает набор клиентских интерфейсов, которые отделены от интерфейсов поставщика. Дополнительные сведения см. в разделе "Создание объекта CUIAutomation".
модель автоматизации пользовательского интерфейса поставщики могут предоставлять сведения клиентам Microsoft Active Accessibility, а серверы активных специальных возможностей Майкрософт могут предоставлять сведения для модель автоматизации пользовательского интерфейса клиентских приложений. Однако, поскольку microsoft Active Accessibility не предоставляет столько сведений, сколько модель автоматизации пользовательского интерфейса, две модели не полностью совместимы.
Элементы пользовательского интерфейса
Microsoft Active Accessibility представляет элемент пользовательского интерфейса как интерфейс IAccessible , связанный с дочерним идентификатором. Трудно сравнить два указателя IAccessible , чтобы определить, ссылаются ли они на один и тот же элемент.
В модель автоматизации пользовательского интерфейса каждый элемент представляется как объект, предоставляющий интерфейс IUIAutomationElement клиентам. Элементы можно сравнить с помощью идентификаторов времени выполнения, которые извлекаются с помощью IUIAutomationElement::GetRuntimeId.
Представления в виде дерева и навигация
Элементы пользовательского интерфейса на экране можно рассматривать как структуру дерева с рабочим столом в качестве корневого, окна приложений как непосредственные дочерние элементы и элементы в приложениях в качестве последующих потомков.
В Microsoft Active Accessibility многие элементы пользовательского интерфейса, которые не относятся к конечным пользователям, предоставляются в структуре дерева. Клиентские приложения должны проверять все элементы в дереве, чтобы определить, какие элементы являются значимыми.
модель автоматизации пользовательского интерфейса клиентские приложения видят пользовательский интерфейс через отфильтрованное представление. Представление содержит только элементы, которые предоставляют пользователю информацию или с которым пользователь может взаимодействовать. Предопределенные представления, включающие только элементы управления и доступны только элементы содержимого, и клиентские приложения могут определять пользовательские представления. модель автоматизации пользовательского интерфейса упрощает описание пользовательского интерфейса пользователю и помогает пользователю взаимодействовать с приложениями.
В Microsoft Active Accessibility навигация между элементами является пространственной, например переход к элементу, который находится слева на экране, логическим, например переход к следующему элементу меню или следующему элементу в порядке вкладок в диалоговом окне или иерархическим, например переход к первому дочернему элементу в контейнере или из дочернего элемента в родительский элемент. Иерархическая навигация усложняется тем, что дочерние элементы не всегда являются объектами, реализующими IAccessible.
В модель автоматизации пользовательского интерфейса все элементы пользовательского интерфейса — это COM-объекты, предоставляющие интерфейс IUIAutomationElement и поддерживающие те же основные функциональные возможности. С точки зрения поставщика COM-объекты реализуют интерфейс, унаследованный от IRawElementProviderSimple. Навигация в основном иерархическая; то есть от родителей до детей, и от одного брата до следующего. Однако навигация между братьями и сестрами имеет логический элемент, так как он может следовать за порядком вкладок. Клиент может перемещаться из любой начальной точки, используя любое отфильтрованное представление дерева с помощью IUIAutomationTreeWalker. Клиент также может переходить к определенным детям или потомкам с помощью IUIAutomationElement::FindFirst и IUIAutomationElement::FindAll. Например, легко получить все элементы в диалоговом окне, поддерживающие указанный шаблон элемента управления.
Навигация в модель автоматизации пользовательского интерфейса более согласована, чем в microsoft Active Accessibility. Некоторые элементы, такие как раскрывающиеся списки и всплывающие окна, отображаются дважды в дереве специальных возможностей Майкрософт, а навигация из этих элементов может иметь непредвиденные результаты. Трудно правильно реализовать специальные возможности Microsoft Active Для элемента управления перекладином. модель автоматизации пользовательского интерфейса обеспечивает повторную и перепозицию, чтобы элемент можно было разместить в любом месте дерева, несмотря на иерархию, наложенную владением окнами.
Роли и типы элементов управления
Microsoft Active Accessibility использует свойство accRole (IAccessible::get_accRole) для получения описания роли элемента в пользовательском интерфейсе, например ROLE_SYSTEM_SLIDER или ROLE_SYSTEM_MENUITEM. Роль элемента — это основной ключ к его доступным функциональным возможностям. Взаимодействие с элементом управления достигается с помощью фиксированных методов, таких как IAccessible::accSelect и IAccessible::accDoDefaultAction. Взаимодействие между клиентским приложением и пользовательским интерфейсом ограничено тем, что можно сделать с помощью IAccessible.
В отличие от этого, модель автоматизации пользовательского интерфейса отделяет тип элемента управления, описываемый свойством IUIAutomationElement::CurrentControlType (или IUIAutomationElement::CachedControlType) от ожидаемой функциональности. Функциональность определяется шаблонами элементов управления, которые поддерживаются поставщиком через его реализацию специализированных интерфейсов. Шаблоны элементов управления можно объединить, чтобы описать полный набор функциональных возможностей, поддерживаемых определенным элементом пользовательского интерфейса. Для поддержки определенного шаблона элемента управления требуются некоторые поставщики. Например, поставщик флажка должен поддерживать шаблон элемента управления Toggle . Для поддержки одного или нескольких шаблонов элементов управления требуются другие поставщики. Например, кнопка должна поддерживать переключатель или шаблон элемента управления Invoke . Тем не менее другие не поддерживают шаблоны элементов управления. Например, панель, которая не может быть перемещена, изменена или закреплена, не имеет шаблонов элементов управления.
модель автоматизации пользовательского интерфейса поддерживает пользовательские элементы управления, которые определяются UIA_CustomControlTypeId константы и могут быть описаны свойством IUIAutomationElement::CurrentLocalizedControlType (или IUIAutomationElement::CachedLocalizedControlType).
В следующей таблице перечислены роли объектов Microsoft Active Accessibility с модель автоматизации пользовательского интерфейса типами элементов управления.
Состояния и свойства
Элементы Microsoft Active Accessibility поддерживают общий набор свойств. Некоторые свойства, такие как accState, должны описывать различные условия в зависимости от роли элемента. Серверы должны реализовать все методы IAccess , возвращающие свойство, даже те свойства, которые не относятся к элементу.
модель автоматизации пользовательского интерфейса определяет дополнительные свойства, некоторые из которых соответствуют состояниям в Microsoft Active Accessibility. Некоторые свойства являются общими для всех элементов, но другие свойства относятся к типам элементов управления и шаблонам элементов управления. Поставщик модель автоматизации пользовательского интерфейса не должен реализовывать неуместные свойства, но может возвращать значение NULL для любых свойств, которые он не поддерживает. Основная служба модель автоматизации пользовательского интерфейса может получить некоторые свойства от поставщика окон по умолчанию, и они являются амальгаматированы с свойствами, явно реализованными поставщиком.
Кроме того, кроме поддержки многих дополнительных свойств, модель автоматизации пользовательского интерфейса обеспечивает более высокую производительность, позволяя кэшировать свойства.
В следующей таблице показано соответствие некоторых свойств в двух моделях. Описание идентификаторов свойств модель автоматизации пользовательского интерфейса см. в разделе "Идентификаторы свойств элемента автоматизации".
Метод доступа к свойству Active Accessibility | идентификатор свойства модель автоматизации пользовательского интерфейса | Замечания |
---|---|---|
get_accKeyboardShortcut | UIA_AccessKeyPropertyId или UIA_AcceleratorKeyPropertyId | UIA_AccessKeyPropertyId имеет приоритет, если оба присутствуют. |
get_accName | UIA_NamePropertyId | |
get_accRole | UIA_ControlTypePropertyId | См. предыдущую таблицу для сопоставления ролей с типами элементов управления. |
get_accValue | UIA_ValueValuePropertyId или UIA_RangeValueValuePropertyId | Допустимо только для типов элементов управления, поддерживающих IUIAutomationValuePattern или IUIAutomationRangeValuePattern. Значения диапазона нормализуются до 0–100, чтобы соответствовать поведению Microsoft Active Accessibility. Значения представлены в виде строк. |
get_accHelp | UIA_HelpTextPropertyId | |
accLocation | UIA_BoundingRectanglePropertyId | |
get_accDescription | Не поддерживается. | accDescription не имеет четкой спецификации в Microsoft Active Accessibility, что привело к тому, что серверы помещали различные фрагменты информации в этом свойстве. |
get_accHelpTopic | Не поддерживается. |
В следующей таблице показаны идентификаторы свойств модель автоматизации пользовательского интерфейса, которые соответствуют константам состояния объекта Microsoft Active Accessibility.
Активное состояние специальных возможностей | свойство модель автоматизации пользовательского интерфейса | Активирует изменение состояния WinEvent? |
---|---|---|
STATE_SYSTEM_CHECKED | UIA_ToggleToggleStatePropertyId для флажка. UIA_SelectionItemIsSelectedPropertyId для переключателя. | Y |
STATE_SYSTEM_COLLAPSED | UIA_ExpandCollapseExpandCollapseStatePropertyId (значение = ExpandCollapseState_Collapsed). | Y |
STATE_SYSTEM_EXPANDED | UIA_ExpandCollapseExpandCollapseStatePropertyId (значение = ExpandCollapseState_Expanded или ExpandCollapseState_PartiallyExpanded). | Y |
STATE_SYSTEM_FOCUSABLE | UIA_IsKeyboardFocusablePropertyId. | N |
STATE_SYSTEM_FOCUSED | UIA_HasKeyboardFocusPropertyId. | N |
STATE_SYSTEM_HASPOPUP | UIA_ExpandCollapseExpandCollapseStatePropertyId для элементов меню. | N |
STATE_SYSTEM_INVISIBLE | UIA_IsOffscreenPropertyId (значение = True и IUIAutomationElement::GetClickablePoint завершается ошибкой). | N |
STATE_SYSTEM_LINKED | UIA_ControlTypePropertyId (значение = UIA_HyperlinkControlTypeId). | N |
STATE_SYSTEM_MIXED | UIA_ToggleToggleStatePropertyId (значение = ToggleState_Indeterminate. | N |
STATE_SYSTEM_MOVEABLE | UIA_TransformCanMovePropertyId. | N |
STATE_SYSTEM_MULTISELECTABLE | UIA_SelectionCanSelectMultiplePropertyId. | N |
STATE_SYSTEM_OFFSCREEN | UIA_IsOffscreenPropertyId. | N |
STATE_SYSTEM_PROTECTED | UIA_IsPasswordPropertyId. | N |
STATE_SYSTEM_READONLY | UIA_RangeValueIsReadOnlyPropertyId и UIA_ValueIsReadOnlyPropertyId. | N |
STATE_SYSTEM_SELECTABLE | UIA_IsSelectionItemPatternAvailablePropertyId . | N |
STATE_SYSTEM_SELECTED | UIA_SelectionItemIsSelectedPropertyId. | N |
STATE_SYSTEM_SIZEABLE | UIA_TransformCanResizePropertyId. | N |
STATE_SYSTEM_UNAVAILABLE | UIA_IsEnabledPropertyId. | Y |
Полный список идентификаторов свойств см. в разделе "Идентификаторы свойств".
События
В отличие от специальных возможностей Microsoft Active, механизм событий в модель автоматизации пользовательского интерфейса, не зависит от маршрутизации событий Windows, которая тесно связана с дескрипторами окон и не требует клиентского приложения для настройки перехватчиков. Подписки на события можно точно настроить на определенные части дерева, а не только на определенные события. Поставщики также могут точно настраивать события, отслеживая, какие события прослушиваются.
Кроме того, клиенты могут получить элементы, которые вызывают события, так как они передаются непосредственно обратному вызову события. Свойства элемента автоматически извлекаются, если запрос кэша был предоставлен при подписке клиента на событие.
В следующей таблице показаны константы событий Microsoft Active Accessibility и идентификаторы событий модель автоматизации пользовательского интерфейса.
WinEvent | идентификатор события модель автоматизации пользовательского интерфейса |
---|---|
EVENT_OBJECT_ACCELERATORCHANGE | изменение свойства UIA_AcceleratorKeyPropertyId. |
EVENT_OBJECT_CONTENTSCROLLED | изменение свойства UIA_ScrollVerticalScrollPercentPropertyId или UIA_ScrollHorizontalScrollPercentPropertyId на связанных полосах прокрутки. |
EVENT_OBJECT_CREATE | UIA_StructureChangedEventId. |
EVENT_OBJECT_DEFACTIONCHANGE | Эквивалент отсутствует. |
EVENT_OBJECT_DESCRIPTIONCHANGE | Нет точного эквивалента; Возможно, изменение свойства UIA_HelpTextPropertyId или UIA_LocalizedControlTypePropertyId . |
EVENT_OBJECT_DESTROY | UIA_StructureChangedEventId. |
EVENT_OBJECT_FOCUS | UIA_AutomationFocusChangedEventId. |
EVENT_OBJECT_HELPCHANGE | UIA_HelpTextPropertyId изменения. |
EVENT_OBJECT_HIDE | UIA_StructureChangedEventId. |
EVENT_OBJECT_LOCATIONCHANGE | изменение свойства UIA_BoundingRectanglePropertyId. |
EVENT_OBJECT_NAMECHANGE | изменение свойства UIA_NamePropertyId. |
EVENT_OBJECT_PARENTCHANGE | UIA_StructureChangedEventId. |
EVENT_OBJECT_REORDER | Не всегда используется в microsoft Active Accessibility. В модель автоматизации пользовательского интерфейса не определено непосредственно соответствующее событие. |
EVENT_OBJECT_SELECTION | UIA_SelectionItem_ElementSelectedEventId. |
EVENT_OBJECT_SELECTIONADD | UIA_SelectionItem_ElementAddedToSelectionEventId. |
EVENT_OBJECT_SELECTIONREMOVE | UIA_SelectionItem_ElementRemovedFromSelectionEventId. |
EVENT_OBJECT_SELECTIONWITHIN | Эквивалент отсутствует. |
EVENT_OBJECT_SHOW | UIA_StructureChangedEventId. |
EVENT_OBJECT_STATECHANGE | Различные события, изменяемые свойством. |
EVENT_OBJECT_VALUECHANGE | изменены UIA_RangeValueValuePropertyId и UIA_ValueValuePropertyId. |
EVENT_SYSTEM_ALERT | Эквивалент отсутствует. |
EVENT_SYSTEM_CAPTUREEND | Эквивалент отсутствует. |
EVENT_SYSTEM_CAPTURESTART | Эквивалент отсутствует. |
EVENT_SYSTEM_CONTEXTHELPEND | Эквивалент отсутствует. |
EVENT_SYSTEM_CONTEXTHELPSTART | Эквивалент отсутствует. |
EVENT_SYSTEM_DIALOGEND | UIA_Window_WindowClosedEventId. |
EVENT_SYSTEM_DIALOGSTART | UIA_Window_WindowOpenedEventId. |
EVENT_SYSTEM_DRAGDROPEND | Эквивалент отсутствует. |
EVENT_SYSTEM_DRAGDROPSTART | Эквивалент отсутствует. |
EVENT_SYSTEM_FOREGROUND | UIA_AutomationFocusChangedEventId. |
EVENT_SYSTEM_MENUEND | UIA_MenuModeEndEventId. |
EVENT_SYSTEM_MENUPOPUPEND | UIA_MenuClosedEventId. |
EVENT_SYSTEM_MENUPOPUPSTART | UIA_MenuOpenedEventId. |
EVENT_SYSTEM_MENUSTART | UIA_MenuModeStartEventId. |
EVENT_SYSTEM_MINIMIZEEND | изменение свойства UIA_WindowWindowVisualStatePropertyId. |
EVENT_SYSTEM_MINIMIZESTART | изменение свойства UIA_WindowWindowVisualStatePropertyId. |
EVENT_SYSTEM_MOVESIZEEND | изменение свойства UIA_BoundingRectanglePropertyId. |
EVENT_SYSTEM_MOVESIZESTART | изменение свойства UIA_BoundingRectanglePropertyId. |
EVENT_SYSTEM_SCROLLINGEND | изменение свойства UIA_ScrollVerticalScrollPercentPropertyId или UIA_ScrollHorizontalScrollPercentPropertyId. |
EVENT_SYSTEM_SCROLLINGSTART | изменение свойства UIA_ScrollVerticalScrollPercentPropertyId или UIA_ScrollHorizontalScrollPercentPropertyId. |
EVENT_SYSTEM_SOUND | Эквивалент отсутствует. |
EVENT_SYSTEM_SWITCHEND | Нет эквивалента , но событие UIA_AutomationFocusChangedEventId сигнализирует о том, что новое приложение получило фокус. |
EVENT_SYSTEM_SWITCHSTART | Эквивалент отсутствует. |
Эквивалент отсутствует. | изменение свойства UIA_MultipleViewCurrentViewPropertyId. |
Эквивалент отсутствует. | изменение свойства UIA_ScrollHorizontallyScrollablePropertyId. |
Эквивалент отсутствует. | изменение свойства UIA_ScrollVerticallyScrollablePropertyId. |
Эквивалент отсутствует. | изменение свойства UIA_ScrollHorizontalScrollPercentPropertyId. |
Эквивалент отсутствует. | UIA_ScrollVerticalScrollPercentPropertyId изменение свойства. |
Эквивалент отсутствует. | изменение свойства UIA_ScrollHorizontalViewSizePropertyId. |
Эквивалент отсутствует. | изменение свойства UIA_ScrollVerticalViewSizePropertyId. |
Эквивалент отсутствует. | изменение свойства UIA_ToggleToggleStatePropertyId. |
Эквивалент отсутствует. | изменение свойства UIA_WindowWindowVisualStatePropertyId |
Эквивалент отсутствует. | событие UIA_AsyncContentLoadedEventId. |
Эквивалент отсутствует. | событие UIA_ToolTipOpenedEventId. |
Доступ к активным свойствам и объектам специальных возможностей из модель автоматизации пользовательского интерфейса
Ключевой особенностью модель автоматизации пользовательского интерфейса, недоступной в Microsoft Active Accessibility, является возможность получения нескольких свойств с помощью одной межпроцессной операции.
Существующие клиенты Microsoft Active Accessibility могут воспользоваться этой возможностью с помощью интерфейса IUIAutomationLegacyIAccessPattern. Этот интерфейс представляет шаблон элемента управления, предоставляющий свойства и методы Microsoft Active Специальные возможности для элементов пользовательского интерфейса. При извлечении элементов приложение может запросить, чтобы этот шаблон элемента управления и его свойства кэшировались.
IUIAutomationLegacyIAccessPattern также позволяет клиентам получать свойства Microsoft Active Accessibility из элементов, у которых нет собственной поддержки IAccess.
Изменения свойств IUIAutomationLegacyIAccessiblePattern не вызывают модель автоматизации пользовательского интерфейса событий.
См. также
-
Общие сведения о дереве модели автоматизации пользовательского интерфейса
-
Общие сведения о свойствах модели автоматизации пользовательского интерфейса
-
Общие сведения о типах элементов управления автоматизации пользовательского интерфейса
-
Общие сведения о событиях модели автоматизации пользовательского интерфейса