Microsoft Active Accessibility
Encyclopedia
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.
Programmatic exposure for assistive technology applications on Windows has historically been provided through MSAA. However newer applications are now using Microsoft UI Automation
(UIA), which was introduced in Windows Vista and the [.NET Framework] 3.0.
The programmatic goal of MSAA is to allow Windows controls to expose basic information, such as name, location on screen, or type of control, and state information such as visibility, enabled, or selected.
(COM). COM defines a mechanism for applications and operating systems to communicate.
Figure 1 shows a high-level architecture of MSAA.
Applications (e.g., word processor) are called Servers in MSAA because they provide, or serve, information about their user interfaces (UI). Accessibility tools (e.g., screen readers) are called Clients in MSAA because they consume and interact with UI information from an application.
The system component of the MSAA framework, Oleacc.dll, aids in the communication between accessibility tools (clients) and applications (servers). The code boundary indicates the programmatic boundaries between applications that provide UI accessibility information and accessibility tools that interact with the UI on behalf of users. The boundary can also be a process boundary when MSAA clients have their own process.
The UI is represented as a hierarchy of accessible objects; changes and actions are represented as WinEvents.
Microsoft provides a complete list of controls and their functions.
Not all objects have a Value assigned to them.
or rich text
documents. While MSAA still has the Value property, it can host only simple, non-styled text in its value.
Another limitation involves navigating the object model. MSAA represents the UI as a hierarchy of accessible objects. Clients navigate from one accessible object to another using interfaces and methods available from the accessible object. Servers can expose the children of an accessible object with properties of the accessible object or with the IEnumVARIANT COM interface. Clients, however, must be able to deal with all approaches for any MSAA server. This ambiguity means extra work for client implementers, and the complexity can contribute to unpredictable problems of server implementations.
Just as important is the ability to extend MSAA properties or functions without breaking or changing the IAccessible COM interface specification. The result is that you cannot expose new control behavior or properties through the object model. The object model tends to be both static and stagnant.
Other developer limitations include:
(UIA): The successor to MSAA was User Interface Automation (UIA). However, since there are still MSAA based applications in existence, bridges are used to allow communication between UI Automation and MSAA applications. So information can be shared between the two APIs, an MSAA-to-UI Automation Proxy and UI Automation-to-MSAA Bridge were developed. The former is a component that consumes MSAA information and makes it available through the UI Automation client API. The latter enables client applications using MSAA access applications that implement UI Automation.
Accessible Rich Internet Applications (WAI-ARIA): There is a general mapping from ARIA attributes to MSAA properties.
IAccessible2
: MSAA provides the roots of IAccessible2. IAccessible2 leverages the work done on MSAA, and adds additional functionality.
Windows Automation API: Starting with Windows 7, Microsoft is packaging its accessibility technologies under a framework called Windows Automation API. MSAA will be part of this framework.
, Mozilla Firefox
, etc. The technology has been used by Test automation
software, such as QuickTest Pro, Functional Tester, and SilkTest.
More implementations of MSAA in applications and AT products can be found by searching on the Microsoft Accessibility sites or on the AT Information website.
Application programming interface
An application programming interface is a source code based specification intended to be used as an interface by software components to communicate with each other...
(API) for user interface accessibility. MSAA was introduced as a platform add-on to Microsoft Windows 95
Windows 95
Windows 95 is a consumer-oriented graphical user interface-based operating system. It was released on August 24, 1995 by Microsoft, and was a significant progression from the company's previous Windows products...
in 1997. MSAA is designed to help Assistive Technology
Assistive technology
Assistive technology or adaptive technology is an umbrella term that includes assistive, adaptive, and rehabilitative devices for people with disabilities and also includes the process used in selecting, locating, and using them...
(AT) products interact with standard and custom user interface
User interface
The user interface, in the industrial design field of human–machine interaction, is the space where interaction between humans and machines occurs. The goal of interaction between a human and a machine at the user interface is effective operation and control of the machine, and feedback from the...
(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
Microsoft UI Automation
Microsoft UI Automation is an Application Programming Interface for User Interface accessibility that is designed to help Assistive Technology products interact with standard and custom UI elements of an application as well as to access, identify, and manipulate an application's UI elements...
Community Promise Specification.
History
MSAA was originally made available in April 1997 in the form of a Re-Distributable Kit (RDK) that included updated operating system components for Microsoft Windows 95. Since [Windows 98] and [Windows NT 4.0] [Service Pack] 4, MSAA has been built-into all versions of the Windows platform, and has received periodic upgrades and patches over time.Programmatic exposure for assistive technology applications on Windows has historically been provided through MSAA. However newer applications are now using Microsoft UI Automation
Microsoft UI Automation
Microsoft UI Automation is an Application Programming Interface for User Interface accessibility that is designed to help Assistive Technology products interact with standard and custom UI elements of an application as well as to access, identify, and manipulate an application's UI elements...
(UIA), which was introduced in Windows Vista and the [.NET Framework] 3.0.
Version history
The following Active Accessibility versions have been released:Version | Description |
---|---|
1.0 | Original add-on release for Windows 95. The RDK was supported only in the English version of the operating system. (1997) |
1.1 | Included in Windows 98 Windows 98 Windows 98 is a graphical operating system by Microsoft. It is the second major release in the Windows 9x line of operating systems. It was released to manufacturing on 15 May 1998 and to retail on 25 June 1998. Windows 98 is the successor to Windows 95. Like its predecessor, it is a hybrid... . |
1.2.x | First revision of MSAA that was made available to both English and international versions of Windows. (1998) |
1.3.x | Additional support added for more languages. Introduced satellite DLL Dynamic-link library Dynamic-link library , or DLL, is Microsoft's implementation of the shared library concept in the Microsoft Windows and OS/2 operating systems... (oleaccrc.dll) for its international text resource library. Later the system components were integrated into Windows NT 4.0 Service Pack 6 and beyond, Windows 98, Windows 2000 and Windows Me. (1999) |
2.0 | First major revision of MSAA, adding support for Dynamic Annotation and MSAA Text. This version was integrated into Windows XP Windows XP Windows XP is an operating system produced by Microsoft for use on personal computers, including home and business desktops, laptops and media centers. First released to computer manufacturers on August 24, 2001, it is the second most popular version of Windows, based on installed user base... . Minor revisions have been made to the MSAA framework with in subsequent versions of Windows. The 2.0 version of the RDK was made available to older platforms (Windows 95, 98, 2000, Me, NT) in 2003. (2000-2008) |
3.0 | The framework has become part of the Windows Automation API 3.0, which is integrated into the Windows platform accessibility API set by MSAA and UI Automation (UIA). Windows Automation API is included in Windows 7 and available for Windows Vista and XP (2009) |
Motivation and goals
The motivating factor behind the development of MSAA was to allow an available and seamless communication mechanism between the underlying operating system or applications and assistive technology products.The programmatic goal of MSAA is to allow Windows controls to expose basic information, such as name, location on screen, or type of control, and state information such as visibility, enabled, or selected.
Technical overview
MSAA is based on the Component Object ModelComponent Object Model
Component Object Model is a binary-interface standard for software componentry introduced by Microsoft in 1993. It is used to enable interprocess communication and dynamic object creation in a large range of programming languages...
(COM). COM defines a mechanism for applications and operating systems to communicate.
Figure 1 shows a high-level architecture of MSAA.
Applications (e.g., word processor) are called Servers in MSAA because they provide, or serve, information about their user interfaces (UI). Accessibility tools (e.g., screen readers) are called Clients in MSAA because they consume and interact with UI information from an application.
The system component of the MSAA framework, Oleacc.dll, aids in the communication between accessibility tools (clients) and applications (servers). The code boundary indicates the programmatic boundaries between applications that provide UI accessibility information and accessibility tools that interact with the UI on behalf of users. The boundary can also be a process boundary when MSAA clients have their own process.
The UI is represented as a hierarchy of accessible objects; changes and actions are represented as WinEvents.
Accessible objects
The accessible object is the central interface of MSAA, and is represented by an IAccessible COM interface and an integer ChildId. It allows applications to expose a tree structure that represents the structure of the UI. Each element of this tree exposes a set of properties and methods that allow the corresponding UI element to be manipulated. MSAA clients can access the programmatic UI information through a standard API.Roles, names, values, states
MSAA communicates information by sending small chunks of information about elements of a program to the assistive technology object (AT). The four critical pieces of information on which the AT relies to help users interact with applications are an element's role, name, value, and state:- Role: Conveys to users via AT what type of object a control is, such as a button or a table. The IAccessible method for this is get_accRole.
- 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 IAccessible method for this is get_accName.
- 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 IAccessible method for this is get_accValue.
- 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 IAccessible method for this is get_accState.
Microsoft provides a complete list of controls and their functions.
Role
Role information is based on the type of UI control with which a developer wants to interact. For example, if a developer is implementing a button that is clickable, the developer would select Pushbutton as the Role to implement. The following table shows an example list of MSAA Roles and their related descriptions.Role | Description |
---|---|
ROLE_SYSTEM_APPLICATION | The object represents a main window for an application. |
ROLE_SYSTEM_BUTTONMENU | The object represents a button that drops down a menu. |
ROLE_SYSTEM_CARET | The object represents the system caret. |
ROLE_SYSTEM_DIALOG | The object represents a dialog box or message box. |
ROLE_SYSTEM_DOCUMENT | The object represents a document window. A document window is always contained within an application window. This role applies only to Multiple Document Interface Multiple document interface Graphical computer applications with a multiple document interface are those whose windows reside under a single parent window , as opposed to all windows being separate from each other . Such systems often allow child windows to embed other windows inside them as well, creating complex nested... (MDI) windows and refers to the object that contains the MDI title bar. |
ROLE_SYSTEM_GRAPHIC | The object represents a picture. |
ROLE_SYSTEM_LIST | The object represents a list box, allowing the user to select one or more items. |
ROLE_SYSTEM_MENUBAR | The object represents the menu bar (positioned beneath the title bar of a window) from which menus are selected by the user. |
ROLE_SYSTEM_PROGRESSBAR | The object represents a progress bar, dynamically showing the user the percent complete of an operation in progress. This control takes no user input. |
ROLE_SYSTEM_PUSHBUTTON | The object represents a push button control. |
ROLE_SYSTEM_RADIOBUTTON | The object represents an option button, also called a radio button. It is one of a group of mutually exclusive options. All objects sharing a single parent that have this attribute are assumed to be part of single mutually exclusive group. Use ROLE_SYSTEM_GROUPING objects to divide them into separate groups. |
ROLE_SYSTEM_SCROLLBAR | The object represents a vertical or horizontal scroll bar, which is part of the client area or used in a control. |
ROLE_SYSTEM_TITLEBAR | The object represents a title or caption bar for a window. |
ROLE_SYSTEM_TOOLBAR | The object represents a toolbar, which is a grouping of controls that provides easy access to frequently used features. |
ROLE_SYSTEM_WINDOW | The object represents the window frame, which contains child objects such as a title bar, client, and other objects contained in a window. In MSAA, this window object is often equivalent to the HWND object in Windows. |
Name
The Names for elements in an application are assigned in the code by the developer. Many objects such as icons, menus, check boxes, combo boxes, and other controls have labels that are displayed to users. Any label that is displayed to users on a control (e.g., a button) is the default for the object's name property. Ensure the Name of the object makes sense to a user and describes the control properly. The Name property must not include the control role or type information, such as button or list, or it will conflict with the text from the role property (acquired from GetRoleText function of MSAA API).Value
Value is used when a developer wants to return information from objects in the form of a string. Value may be returned for objects where percentages, integers, textual or visual information is contained in the object. For example, the property values returned from scroll bar and trackbar accessible objects can indicate percentages in strings.Not all objects have a Value assigned to them.
State
The State property describes an object's status at a moment in time. Microsoft Active Accessibility provides object state constants, defined in oleacc.h, that are combined to identify an object's state. If predefined state values are returned, clients use GetStateText to retrieve a localized string that describes the state. All objects support the State property.Challenges and limitations
Microsoft designed the MSAA object model about the same time as Windows 95 was released. The model is based on roles. However, these roles, defined a decade ago, cannot support new UI behaviors, or merge two or more roles together. For example, there is no text object model to help assistive technologies deal with styled text such as markup textMarkup language
A markup language is a modern system for annotating a text in a way that is syntactically distinguishable from that text. The idea and terminology evolved from the "marking up" of manuscripts, i.e. the revision instructions by editors, traditionally written with a blue pencil on authors' manuscripts...
or rich text
Rich Text Format
The Rich Text Format is a proprietary document file format with published specification developed by Microsoft Corporation since 1987 for Microsoft products and for cross-platform document interchange....
documents. While MSAA still has the Value property, it can host only simple, non-styled text in its value.
Another limitation involves navigating the object model. MSAA represents the UI as a hierarchy of accessible objects. Clients navigate from one accessible object to another using interfaces and methods available from the accessible object. Servers can expose the children of an accessible object with properties of the accessible object or with the IEnumVARIANT COM interface. Clients, however, must be able to deal with all approaches for any MSAA server. This ambiguity means extra work for client implementers, and the complexity can contribute to unpredictable problems of server implementations.
Just as important is the ability to extend MSAA properties or functions without breaking or changing the IAccessible COM interface specification. The result is that you cannot expose new control behavior or properties through the object model. The object model tends to be both static and stagnant.
Other developer limitations include:
- Exposing only a limited set of information about UI elements
- Chatty interface and requirement to use it in-process limits the use of MSAA to a handful of niche market clients
- IAccessible has many design and API irregularities, making it hard to use and implement.
- Care must be taken when extending IAccessible to ensure that the extension interfaces are fully compatible with IAccessible, and the many implementations already in the market.
Availability
MSAA was initially available as an add-on to Windows 95. It has been integrated with all subsequent Windows versions, up to and including Windows 7.Related technology
Microsoft UI AutomationMicrosoft UI Automation
Microsoft UI Automation is an Application Programming Interface for User Interface accessibility that is designed to help Assistive Technology products interact with standard and custom UI elements of an application as well as to access, identify, and manipulate an application's UI elements...
(UIA): The successor to MSAA was User Interface Automation (UIA). However, since there are still MSAA based applications in existence, bridges are used to allow communication between UI Automation and MSAA applications. So information can be shared between the two APIs, an MSAA-to-UI Automation Proxy and UI Automation-to-MSAA Bridge were developed. The former is a component that consumes MSAA information and makes it available through the UI Automation client API. The latter enables client applications using MSAA access applications that implement UI Automation.
Accessible Rich Internet Applications (WAI-ARIA): There is a general mapping from ARIA attributes to MSAA properties.
IAccessible2
IAccessible2
IAccessible2 is a new accessibility API for Microsoft Windows applications. Initially developed by IBM under the codename Project Missouri, IAccessible2 has been placed under the aegis of the Free Standards Group, now part of the Linux Foundation...
: MSAA provides the roots of IAccessible2. IAccessible2 leverages the work done on MSAA, and adds additional functionality.
Windows Automation API: Starting with Windows 7, Microsoft is packaging its accessibility technologies under a framework called Windows Automation API. MSAA will be part of this framework.
Implementations of MSAA
MSAA is available for developers in all versions of Windows since Windows 95. Since its original introduction, MSAA has been used as a way to add support for programmatic access to the UI for many business and consumer applications, including Microsoft Internet ExplorerInternet Explorer
Windows Internet Explorer is a series of graphical web browsers developed by Microsoft and included as part of the Microsoft Windows line of operating systems, starting in 1995. It was first released as part of the add-on package Plus! for Windows 95 that year...
, Mozilla Firefox
Mozilla Firefox
Mozilla Firefox is a free and open source web browser descended from the Mozilla Application Suite and managed by Mozilla Corporation. , Firefox is the second most widely used browser, with approximately 25% of worldwide usage share of web browsers...
, etc. The technology has been used by Test automation
Test automation
Test automation is the use of software to control the execution of tests, the comparison of actual outcomes to predicted outcomes, the setting up of test preconditions, and other test control and test reporting functions...
software, such as QuickTest Pro, Functional Tester, and SilkTest.
More implementations of MSAA in applications and AT products can be found by searching on the Microsoft Accessibility sites or on the AT Information website.