Введение
Интерфейс программирования приложений Microsoft Active Accessibility (MSAA) — это интерфейс программирования приложений (API) для обеспечения доступности пользовательского интерфейса. MSAA был представлен как дополнение к платформе Microsoft Windows 95 в 1997 году. MSAA разработан для того, чтобы продукты вспомогательных технологий (AT) могли взаимодействовать со стандартными и пользовательскими элементами пользовательского интерфейса (UI) приложения (или операционной системы), а также получать доступ к ним, идентифицировать их и управлять ими. Продукты AT работают с приложениями, поддерживающими MSAA, чтобы обеспечить лучший доступ для людей с физическими или когнитивными затруднениями, нарушениями или ограниченными возможностями. Примеры продуктов AT включают программы экранного доступа для пользователей с ослабленным зрением, экранные клавиатуры для пользователей с ограниченной подвижностью и программы озвучивания для пользователей с нарушениями слуха. MSAA также может использоваться для автоматизированных инструментов тестирования и компьютерных обучающих приложений. Текущая и последняя спецификация MSAA содержится в разделе Microsoft UI Automation Community Promise Specification.
Microsoft Active Accessibility (MSAA) is an application programming interface (API) for user interface accessibility. MSAA was introduced as a platform add on to Microsoft Windows 95 in 1997. MSAA is designed to help Assistive Technology (AT) products interact with standard and custom user interface (UI) elements of an application (or the operating system), as well as to access, identify, and manipulate an application's UI elements. AT products work with MSAA enabled applications in order to provide better access for individuals who have physical or cognitive difficulties, impairments, or disabilities. Some examples of AT products are screen readers for users with limited sight, on screen keyboards for users with limited physical access, or narrators for users with limited hearing. MSAA can also be used for automated testing tools, and computer based training applications. The current and latest specification of MSAA is found in part of Microsoft UI Automation Community Promise Specification.
История
Активная доступность изначально называлась OLE Accessibility, и это наследие отражается в наименовании её бинарных компонентов, таких как oleacc.dll и заголовочный файл oleacc.h, содержащий определения и объявления. В рамках кампании по продвижению бренда Microsoft ActiveX в марте 1996 года OLE Accessibility была переименована в ActiveX Accessibility (иногда называемую AXA) и представлена под этим названием на конференции Microsoft Professional Developers Conference в Сан-Франциско в марте 1996 года. Позже бренд 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 Service Pack 4, MSAA встроена во все версии платформы Windows и с течением времени получала периодические обновления и исправления. Программный доступ для приложений вспомогательных технологий в Windows исторически обеспечивался через MSAA. Однако новые приложения теперь используют Microsoft UI Automation (UIA), представленную в Windows Vista и .NET Framework 3.0.
Мотивация и цели
Мотивацией для разработки MSAA было создание доступного и непрерывного механизма связи между базовой операционной системой или приложениями и вспомогательными технологиями. Программная задача MSAA – предоставить элементам управления Windows возможность раскрывать базовую информацию, такую как имя, положение на экране или тип элемента управления, а также информацию о состоянии, например, видимость, активность или выбранность.
Технический обзор
MSAA основана на компонентной объектной модели (COM). COM определяет механизм взаимодействия между приложениями и операционными системами. На рисунке 1 представлена высокоуровневая архитектура MSAA. Приложения (например, текстовый процессор) в MSAA называются серверами, поскольку они предоставляют информацию о своих пользовательских интерфейсах (UI). Инструменты обеспечения специальных возможностей (например, экранные дикторы) называются клиентами в MSAA, поскольку они используют и взаимодействуют с информацией о пользовательском интерфейсе приложения. Системный компонент фреймворка MSAA, Oleacc.dll, облегчает взаимодействие между инструментами обеспечения специальных возможностей (клиентами) и приложениями (серверами). Граница кода указывает на программные границы между приложениями, предоставляющими информацию о доступности пользовательского интерфейса, и инструментами обеспечения специальных возможностей, взаимодействующими с пользовательским интерфейсом от имени пользователей. Эта граница также может быть границей процесса, когда клиенты MSAA работают в собственном процессе. Пользовательский интерфейс представлен в виде иерархии доступных объектов, а изменения и действия – как события WinEvents.
Доступные объекты
Доступный объект — это центральный интерфейс MSAA, представленный COM-интерфейсом и целым числом. Он позволяет приложениям предоставлять древовидную структуру, отражающую структуру пользовательского интерфейса. Каждый элемент этого дерева предоставляет набор свойств и методов, позволяющих управлять соответствующим элементом пользовательского интерфейса. Клиенты MSAA могут получать доступ к программной информации о пользовательском интерфейсе через стандартный API.
Роли, имена, ценности, состояния
MSAA передает информацию, отправляя небольшие фрагменты данных об элементах программы в объект вспомогательной технологии (AT). Четыре ключевых элемента информации, на которые опирается AT для помощи пользователям во взаимодействии с приложениями, – это роль элемента, имя, значение и состояние:
Role: Conveys to users via AT what type of object a control is, such as a button or a table. The method for this is Name: Provides a label for an element, such as Next on a button that moves users to the next page, or First Name for an edit box. The method for this is Value: Provides the value of the specified object such as the value on a slider bar, or the information in an editable text box. Not all objects have a value. The method for this is State: Identifies the current condition of the control, such as checked for a checkbox. State advises whether a control can be selected, focused, and/or other types of changeable functionality. The method for this is
Microsoft provides a complete list of controls and their functions.
Роль: сообщает пользователям через AT, какой тип объекта представляет собой элемент управления, например, кнопка или таблица. Способ реализации –
Role: Conveys to users via AT what type of object a control is, such as a button or a table. The method for this is Name: Provides a label for an element, such as Next on a button that moves users to the next page, or First Name for an edit box. The method for this is Value: Provides the value of the specified object such as the value on a slider bar, or the information in an editable text box. Not all objects have a value. The method for this is State: Identifies the current condition of the control, such as checked for a checkbox. State advises whether a control can be selected, focused, and/or other types of changeable functionality. The method for this is
Microsoft provides a complete list of controls and their functions.
Имя: предоставляет метку для элемента, например, "Далее" на кнопке, которая переводит пользователя на следующую страницу, или "Имя" для поля редактирования. Способ реализации –
Role: Conveys to users via AT what type of object a control is, such as a button or a table. The method for this is Name: Provides a label for an element, such as Next on a button that moves users to the next page, or First Name for an edit box. The method for this is Value: Provides the value of the specified object such as the value on a slider bar, or the information in an editable text box. Not all objects have a value. The method for this is State: Identifies the current condition of the control, such as checked for a checkbox. State advises whether a control can be selected, focused, and/or other types of changeable functionality. The method for this is
Microsoft provides a complete list of controls and their functions.
Значение: предоставляет значение указанного объекта, например, значение на ползунке или информацию в редактируемом текстовом поле. Не все объекты имеют значение. Способ реализации –
Role: Conveys to users via AT what type of object a control is, such as a button or a table. The method for this is Name: Provides a label for an element, such as Next on a button that moves users to the next page, or First Name for an edit box. The method for this is Value: Provides the value of the specified object such as the value on a slider bar, or the information in an editable text box. Not all objects have a value. The method for this is State: Identifies the current condition of the control, such as checked for a checkbox. State advises whether a control can be selected, focused, and/or other types of changeable functionality. The method for this is
Microsoft provides a complete list of controls and their functions.
Состояние: определяет текущее состояние элемента управления, например, "отмечено" для флажка. Состояние указывает, может ли элемент управления быть выбран, сфокусирован и/или иметь другие изменяемые функции. Способ реализации –
Role: Conveys to users via AT what type of object a control is, such as a button or a table. The method for this is Name: Provides a label for an element, such as Next on a button that moves users to the next page, or First Name for an edit box. The method for this is Value: Provides the value of the specified object such as the value on a slider bar, or the information in an editable text box. Not all objects have a value. The method for this is State: Identifies the current condition of the control, such as checked for a checkbox. State advises whether a control can be selected, focused, and/or other types of changeable functionality. The method for this is
Microsoft provides a complete list of controls and their functions.
Microsoft предоставляет полный список элементов управления и их функций.
Role: Conveys to users via AT what type of object a control is, such as a button or a table. The method for this is Name: Provides a label for an element, such as Next on a button that moves users to the next page, or First Name for an edit box. The method for this is Value: Provides the value of the specified object such as the value on a slider bar, or the information in an editable text box. Not all objects have a value. The method for this is State: Identifies the current condition of the control, such as checked for a checkbox. State advises whether a control can be selected, focused, and/or other types of changeable functionality. The method for this is
Microsoft provides a complete list of controls and their functions.
Роль
Информация о ролях основана на типе элемента управления пользовательского интерфейса, с которым разработчик хочет взаимодействовать. Например, если разработчик реализует кнопку, по которой можно щелкнуть, разработчик выберет в качестве роли для реализации. В следующей таблице приведен пример списка ролей MSAA и их соответствующих описаний. Описание роли РОЛЬ СИСТЕМНОГО ПРИЛОЖЕНИЯ Объект представляет собой главное окно для приложения. ROLE SYSTEM BUTTONMENU Объект представляет собой кнопку, открывающую выпадающее меню. РОЛЬ СИСТЕМНОГО КУРСОРА Объект представляет собой системный курсор. ROLE SYSTEM DIALOG Объект представляет собой диалоговое окно или окно сообщения. ROLE SYSTEM DOCUMENT Объект представляет окно документа. Окно документа всегда содержится в окне приложения. Эта роль применяется только к окнам интерфейса нескольких документов (MDI) и относится к объекту, содержащему панель заголовка MDI. РОЛЬ СИСТЕМНОЙ ГРАФИКИ Объект представляет собой изображение. 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 для получения локализованной строки, описывающей это состояние. Все объекты поддерживают свойство "Состояние".
Проблемы и ограничения
Microsoft разработала объектную модель Active Accessibility во время и после выпуска Windows 95. Модель основана на ролях, каждая из которых представляет тип элемента пользовательского интерфейса. Эти роли ограничены элементами пользовательского интерфейса, которые были распространены в то время. Например, отсутствует текстовая объектная модель, которая помогла бы вспомогательным технологиям работать с разделенными кнопками, объединяющими несколько элементов пользовательского интерфейса в один. MSAA не пытается представлять стилизованный текст, такой как текст с разметкой или документы богатого текста. Хотя MSAA по-прежнему имеет свойство Value, оно может содержать только простой, нестилизованный текст. В то время считалось, что Microsoft Text Object Model (MS TOM) будет более подходящим для представления атрибутов форматированного текста. Однако сложность MS TOM и ограниченное первоначальное распространение за пределами Microsoft затрудняли доступ к богатому тексту. Другим ограничением является навигация по объектной модели. MSAA представляет пользовательский интерфейс в виде иерархии доступных объектов, аналогично диспетчеру окон Windows. Клиенты переходят от одного доступного объекта к другому, используя метод IAccessible::accNavigate. Однако серверы реализовывали accNavigate непредсказуемым образом и часто вообще не реализовывали его. Клиенты, тем не менее, должны уметь обрабатывать все подходы, используемые любым сервером MSAA. Эта неоднозначность создает дополнительную работу для разработчиков клиентских приложений, и сложность может приводить к проблемам в зависимости от реализации сервера. Поскольку IAccessible является COM-интерфейсом, основанным на двоичном коде, он неизменен и не может быть изменен без создания нового интерфейса. В результате невозможно добавить новые роли, поведение или свойства через существующую объектную модель на основе IAccessible. Хотя изначально предполагалось, что это будет общий набор информации об основных элементах пользовательского интерфейса, оказалось сложно расширить его для включения информации о новых методах взаимодействия.
Доступность
MSAA изначально был доступен как дополнение к Windows 95. Он был включен во все последующие версии Windows.
Связанные технологии
Microsoft UI Automation (UIA): Преемником MSAA стала автоматизация пользовательского интерфейса (UIA). Однако, поскольку приложения, основанные на MSAA, все еще существуют, используются мосты для обеспечения взаимодействия между UI Automation и приложениями MSAA. Для обмена информацией между этими двумя API были разработаны прокси-сервер MSAA to UI Automation и мост UI Automation to MSAA. Первый компонент потребляет информацию MSAA и делает ее доступной через клиентский API UI Automation. Второй позволяет клиентским приложениям, использующим MSAA, получать доступ к приложениям, реализующим UI Automation. Доступные богатые интернет-приложения (WAI ARIA): существует общее соответствие между атрибутами ARIA и свойствами MSAA. IAccessible2: MSAA предоставляет основу для IAccessible2. IAccessible2 опирается на разработки, выполненные в MSAA, и добавляет дополнительную функциональность. Windows Automation API: Начиная с Windows 7, Microsoft объединяет свои технологии обеспечения доступности в единую платформу под названием Windows Automation API. MSAA станет частью этой платформы.
Реализация Microsoft Active Accessibility
Активная доступность доступна для разработчиков во всех версиях Windows, начиная с Windows 95. С момента своего появления MSAA использовалась для обеспечения программного доступа к пользовательскому интерфейсу во многих бизнес- и потребительских приложениях, включая Microsoft Internet Explorer, Mozilla Firefox, Microsoft Office и другие. Помимо вспомогательных технологий, таких как экранные дикторы, программы увеличения изображения и устройства альтернативной и дополнительной коммуникации (AAC), эта технология применялась в программном обеспечении для автоматизированного тестирования, например, QuickTest Pro, Functional Tester и SilkTest. Дополнительные примеры реализации MSAA в приложениях и вспомогательных технологиях можно найти на сайтах Microsoft Accessibility или на веб-сайте AT Information.