Microsoft Active Accessibility
Microsoft Active Accessibility (MSAA) — это интерфейс программирования приложений (API) для обеспечения доступности пользовательских интерфейсов. Технология MSAA была представлена в 1997 году в виде дополнительного компонента к операционной системе Microsoft Windows 95. MSAA предназначена для упрощения взаимодействия продуктов вспомогательных технологий со стандартными и пользовательскими элементами интерфейса приложений или операционной системы, а также для получения доступа к этим элементам, их идентификации и управления ими. Продукты ВТ используют возможности приложений с поддержкой MSAA для предоставления доступа пользователям с физическими, когнитивными ограничениями, нарушениями или инвалидностью. Среди таких продуктов: программы-экранные дикторы для слабовидящих, экранные клавиатуры для пользователей с ограниченной подвижностью, а также приложения для озвучивания информации пользователям с нарушениями слуха. MSAA также применяется в автоматизированных средствах тестирования и обучающих компьютерных программах.
Текущая и последняя спецификация MSAA включена в состав Community Promise Specification для Microsoft UI Automation.
История
Изначально технология Active Accessibility называлась «OLE Accessibility»[1], что отражено в названиях некоторых её бинарных компонентов, например, oleacc.dll и файле заголовков oleacc.h с определениями и декларациями. В марте 1996 года, в рамках продвижения бренда ActiveX, OLE Accessibility была переименована в ActiveX Accessibility и была представлена на конференции Microsoft Professional Developers Conference в Сан-Франциско. Позже бренд ActiveX был зарезервирован для интернет-технологий, а название ActiveX Accessibility сменилось на Active Accessibility, часто сокращаемое как MSAA.
MSAA стала доступна в апреле 1997 года как часть набора для разработчиков Microsoft Active Accessibility Software Developers Kit (SDK) версии 1.0. В комплект SDK входили документация, библиотеки программирования, примеры исходного кода и пакет для распространения (RDK) для включения в продукты поставщиков вспомогательных технологий. В составе RDK присутствовали обновления компонентов операционной системы Microsoft Windows 95. Начиная с Windows 98 и Windows NT 4.0 с пакетом обновления 4, MSAA интегрирована во все версии платформы Windows и периодически обновлялась.
Изначально программный доступ к элементам управления в Windows для ВТ обеспечивался при помощи MSAA. Однако в более новых приложениях используется технология Microsoft UI Automation (UIA), представленная в Windows Vista и .NET Framework 3.0.
История версий
Были выпущены следующие версии Active Accessibility:[2]
| Версия | Описание |
|---|---|
| 1.0 | Исходная версия-дополнение для Windows 95. RDK поддерживался только для английской версии ОС. (1997) |
| 1.1 | Включена в Windows 98. |
| 1.2.x | Первая редакция MSAA, доступная как для английской, так и для международных версий Windows. (1998) |
| 1.3.x | Добавлена поддержка новых языков; введена сателлитная DLL (oleaccrc.dll) для международных языковых ресурсов. Позже компоненты были интегрированы в Windows NT 4.0 Service Pack 6 и выше, Windows 98, Windows 2000 и Windows Me (1999). |
| 2.0 | Первый серьёзный пересмотр MSAA, включающий поддержку динамических аннотаций и MSAA Text. Эта версия интегрирована в Windows XP. Мелкие модификации рамочной архитектуры MSAA осуществлялись в последующих версиях Windows. Версия 2.0 RDK стала доступна для старых платформ (Windows 95, 98, 2000, Me, NT) в 2003 году. (2000–2008) |
| 3.0 | Фреймворк вошёл в состав Windows Automation API 3.0, интегрированную в платформу Windows как обобщённый API доступности (на базе MSAA и UI Automation). Windows Automation API включена в Windows 7, а также доступна для Windows Vista и XP (2009) |
Мотивация и цели
Разработка MSAA была мотивирована необходимостью организовать доступный и прозрачный механизм взаимодействия между операционной системой/приложениями и продуктами вспомогательных технологий.
Главная программная цель MSAA — обеспечить возможность управления стандартными элементами управления Windows: предоставлять сведения о названии, местоположении на экране, типе элемента управления и его состоянии, например, видимость, включённость, выбранность.
Технические особенности
MSAA основана на Component Object Model (COM). COM определяет механизм связи между приложениями и операционной системой.
На высоком уровне архитектура MSAA выглядит следующим образом: приложения, например, текстовые редакторы, называются серверами, так как предоставляют информацию о своём интерфейсе (UI); вспомогательные технологии, например, экранные дикторы, называются клиентами, поскольку потребляют эту информацию.
Системный компонент MSAA, Oleacc.dll, обеспечивает взаимодействие между вспомогательными технологиями и приложениями. Программная граница обозначает разделение между приложениями, предоставляющими информацию о доступности UI, и инструментами, которые взаимодействуют с UI от лица пользователей; она может соответствовать границе процесса, если клиенты MSAA выполняются в отдельных процессах.
Пользовательский интерфейс описывается в виде иерархии доступных объектов, а изменения и действия отображаются через WinEvents.
Доступные объекты
Центральным интерфейсом MSAA является доступный объект, представленный интерфейсом COM IAccessible и целым идентификатором ChildId. Это позволяет приложениям формировать дерево объектов, отражающее структуру UI. Каждый элемент дерева раскрывает ряд свойств и методов, позволяющих управлять соответствующим элементом интерфейса. Клиенты MSAA получают программный доступ к данным UI через стандартный API.
Роли, имена, значения, состояния
MSAA передаёт вспомогательным технологиям ключевую информацию об элементах интерфейса: роль элемента, его имя, значение и состояние:
- Роль: описывает тип UI-объекта, например «кнопка» или «таблица». Метод интерфейса IAccessible для этого — get_accRole.
- Имя: отображаемая пользователю метка, например «Далее» на кнопке или «Имя» для поля ввода. Получается с помощью get_accName.
- Значение: информация о текущем значении объекта (например, положение ползунка или содержимое текстового поля). Не все объекты имеют значение. Получается с помощью get_accValue.
- Состояние: текущее состояние элемента управления (например, галочка установлена). Определяет, можно ли элемент выбрать, сфокусировать и др. Получается с помощью get_accState.
Полный перечень элементов управления и их функций предоставлен Microsoft[3].
Роль определяется типом элемента управления, с которым взаимодействует разработчик. Например, для реализуемой кнопки, вызывающей действие при нажатии, следует выбрать роль Pushbutton. Вот типовые роли MSAA и их описание:
| Роль | Описание |
|---|---|
| ROLE_SYSTEM_APPLICATION | Объект представляет главное окно приложения. |
| ROLE_SYSTEM_BUTTONMENU | Объект представляет кнопку, раскрывающую меню. |
| ROLE_SYSTEM_CARET | Объект представляет системный курсор (каретку). |
| ROLE_SYSTEM_DIALOG | Объект представляет диалоговое окно или окно сообщения. |
| ROLE_SYSTEM_DOCUMENT | Объект представляет окно документа, всегда вложенное в окно приложения. Применяется только к окнам MDI и обозначает объект с полосой заголовка MDI. |
| ROLE_SYSTEM_GRAPHIC | Объект представляет изображение. |
| ROLE_SYSTEM_LIST | Объект представляет список для выбора одного или нескольких элементов. |
| ROLE_SYSTEM_MENUBAR | Объект представляет строку меню (под полосой заголовка окна). |
| ROLE_SYSTEM_PROGRESSBAR | Объект представляет индикатор выполнения, динамически показывающий процент завершения операции; не принимает пользовательский ввод. |
| ROLE_SYSTEM_PUSHBUTTON | Объект представляет обычную кнопку. |
| ROLE_SYSTEM_RADIOBUTTON | Объект представляет переключатель (радиокнопку), одиночный из группы взаимно исключающих вариантов. Для разделения на группы используются объекты ROLE_SYSTEM_GROUPING. |
| ROLE_SYSTEM_SCROLLBAR | Объект представляет вертикальную или горизонтальную полосу прокрутки, часть клиентской области или управляющего элемента. |
| ROLE_SYSTEM_TITLEBAR | Объект представляет заголовок или полосу заголовка окна. |
| ROLE_SYSTEM_TOOLBAR | Объект представляет панель инструментов — группу элементов, предоставляющих быстрый доступ к функциям. |
| ROLE_SYSTEM_WINDOW | Объект представляет оконную рамку, включающую дочерние элементы (заголовок, клиентскую область и прочие). В MSAA этот объект часто эквивалентен объекту HWND в Windows. |
Имена элементам присваиваются в коде разработчиком. Большинство объектов (значки, меню, флажки, выпадающие списки) имеют отображаемые пользователю метки. Любая такая метка автоматически используется как свойство имени для объекта. Название должно быть осмысленным и ясно описывать элемент. Свойство имени не должно включать роль или тип, чтобы избежать конфликта с текстом роли (получаемым через функцию GetRoleText API MSAA).
Свойство значения используется, если разработчик хочет вернуть информацию об объекте в виде строки. Значения могут быть числовыми, процентными, текстовыми и пр. Например, значения доступных объектов полосы прокрутки и ползунка могут быть представлены как проценты в строковом формате.
Не все объекты имеют свойство значения.
Свойство состояния характеризует статус объекта в конкретный момент времени. Microsoft Active Accessibility определяет константы состояний объектов, определённые в oleacc.h, которые комбинируются для идентификации состояния. Клиенты могут использовать GetStateText для получения локализованной строки описания состояния. Все объекты поддерживают свойство состояния.
Проблемы и ограничения
Модель объектов Active Accessibility была разработана в период и после выпуска Windows 95. Она строится по принципу ролей, при этом каждая роль отражает определённый тип элемента интерфейса. Эти роли были ориентированы на элементы, распространённые на момент создания. Например, в MSAA отсутствует текстовая объектная модель, позволяющая вспомогательным технологиям корректно обрабатывать сложные элементы, такие как split-кнопки, сочетающие несколько управляющих элементов. Кроме того, MSAA не поддерживает стилизованный текст, такой как разметка или форматированный текст. Хотя свойство значения (Value) осталось, оно подходит только для простого, нестилизованного текста. Предполагалось, что для представления атрибутов форматированного текста больше подходит MS-TOM, но из-за сложности и ограниченного применения MS-TOM широкая поддержка rich text технологий была затруднена.
Ещё одно ограничение связано с навигацией по объектной модели. MSAA описывает интерфейс как иерархию доступных объектов, аналогично оконному менеджеру Windows. Навигация осуществляется методом IAccessible::accNavigate, однако серверные приложения реализовывали его по-разному, а зачастую и вовсе не реализовывали. Поэтому клиенты должны быть готовы к любым вариантам, что усложняет их реализацию и может приводить к ошибкам, зависящим от реализации сервера.
Поскольку интерфейс IAccessible реализован как бинарный COM-интерфейс, он неизменяем (immutable) — его нельзя изменить без создания нового интерфейса. Это означает невозможность добавления новых ролей, свойств или поведения без отказа от существующей модели. Хотя задумывалось, что она будет представлять универсальное множество данных о базовых UI-элементах, впоследствии оказалось трудно расширять её новыми сценариями взаимодействия.
Доступность технологии
MSAA изначально распространялась как отдельное дополнение для Windows 95. Начиная со всех последующих версий Windows, включена в состав системы.
Связанные технологии
Microsoft UI Automation (UIA): Следующим поколением MSAA стала технология UI Automation. Поскольку в старых приложениях до сих пор используется MSAA, между MSAA и UIA реализованы мосты (bridges). Это позволяет обмениваться информацией между разными API: существуют MSAA-to-UI Automation Proxy и UI Automation-to-MSAA Bridge. Первый — компонент, предоставляющий данные MSAA через клиентский API UIA; второй — компонент, позволяющий клиентским приложениям MSAA получать доступ к приложениям с поддержкой UIA.
Accessible Rich Internet Applications (WAI-ARIA): Существует соответствие между атрибутами ARIA и свойствами MSAA[4].
IAccessible2: MSAA легла в основу спецификации IAccessible2, которая расширяет и дополняет MSAA новыми возможностями.
Windows Automation API: Начиная с Windows 7, основные технологии доступности Microsoft объединены под фреймворком Windows Automation API, частью которого остаётся и MSAA.
Реализации Microsoft Active Accessibility
Active Accessibility доступна разработчикам во всех версиях Windows, начиная с Windows 95. С момента появления MSAA стала основой программной поддержки доступности интерфейса для широкого спектра корпоративных и пользовательских приложений: Microsoft Internet Explorer, Mozilla Firefox, Microsoft Office и др. Помимо вспомогательных средств (экранные дикторы, программные увеличители, устройства альтернативной коммуникации англ. Augmentative and Alternative Communication, AAC), технология применяется и в программных средствах автоматизированного тестирования — QuickTest Pro, Functional Tester, SilkTest и др.
Больше примеров внедрения MSAA в приложениях и ВТ можно найти на сайтах Microsoft о доступности и на информационных порталах по вспомогательным технологиям[5][6][7].
Примечания
- ↑ NFB-RD Mailing List February 1996 (англ.). NFB California. Дата обращения: 11 июня 2024. Архивировано 3 марта 2016 года.
- ↑ Supported Platforms: Active Accessibility (англ.). Microsoft Docs. Дата обращения: 11 июня 2024. Архивировано 21 февраля 2009 года.
- ↑ Windows Controls (англ.). Microsoft Docs. Дата обращения: 11 июня 2024. Архивировано 3 мая 2008 года.
- ↑ UI Automation Specification (англ.). Microsoft Docs. Дата обращения: 11 июня 2024. Архивировано 11 октября 2008 года.
- ↑ Accessibility in Microsoft Products (англ.). Microsoft Accessibility. Дата обращения: 11 июня 2024. Архивировано 16 декабря 2025 года.
- ↑ History of Microsoft's Commitment to Accessibility (англ.). Microsoft Accessibility. Дата обращения: 11 июня 2024. Архивировано 11 июня 2003 года.
- ↑ Assistive Technology Information Links (англ.). Trace Center. Дата обращения: 11 июня 2024. Архивировано 23 июля 2012 года.
Литература
- Accessibility at Microsoft (англ.). Microsoft Accessibility. Дата обращения: 11 июня 2024.