I am starting work on accessibility and I am a bit confused by the different technologies I have encountered.
What is the difference between IAccessible and IAccessible2? I originally thought IAccessible2 may be a newer version of IAccessible, but on further research it looks like it is actually made by competitors of Microsoft. Wikipedia says "It has been positioned as an alternative to Microsoft's new UI Automation API." And how does MSAA fit into this?
Could anyone please clarify the differences between IAccessible, IAccessible2, the UI Automation API and MSAA? And why one may be preferable to the other?
Microsoft Active Accessibility (MSAA) was Microsoft's original accessibility API; version 1 of MSAA was on add-on release for Windows 95. MSAA was limited with regard to the set of roles, names, values and states it supported; this meant that the set of graphical components whose accessibility metadata could be communicated to assistive technologies (e.g. screen readers) was limited.
IAccessible is part of MSAA:
The IAccessible interface is a collection of methods that expose the most common attributes and behaviors of a wide range of user interface (UI) elements. A UI element is a control, such as a menu or push button, that is part of the user interface. An accessible object is a UI element that has a meaningful IAccessible interface.
The limitations of MSAA spurned the development of IAccessible2 (originally at IBM), which was intended to fill the gaps in MSAA, such as "support text controls, tables, hyperlinks, and relations between accessible objects." It was harmonised with the Accessibility Toolkit (ATK) on Linux (especially Gnome). IAccessible2 is complementary to MSAA, not a replacement.
Microsoft UI Automation is Microsoft's own successor for MSAA. See UI Automation and Active Accessibility:
Microsoft Active Accessibility is the legacy API that was introduced in Windows 95, and was designed to make Windows applications accessible. Microsoft UI Automation is the new accessibility model for Windows and is intended to address the needs of assistive technology products and automated testing tools. UI Automation offers many improvements over Microsoft Active Accessibility.
It provides a richer set of roles, states and properties for user interface components that can be communicated to assistive technologies that implement the API.
One area in which these newer accessibility APIs were crucial was accessibility support for rich internet applications. The developers of the W3C's WAI-ARIA specification reviewed the accessibility APIs that existed on various platform and mapped the available roles, states and properties to their proposed counterparts in the WAI-ARIA specification. This involved the creation of mapping tables that can be found in the WAI-ARIA 1.0 User Implementation Guide. See also UI Automation for W3C Accessible Rich Internet Applications Specification in Microsoft's documentation. In Microsoft Edge, Microsoft transitioned from MSAA to UI Automation.