Skip to main content

Writing accessible accessibility tools

Michael A.Squillace, Ph.D, IBM, March 2008


Developers and testers often employ various tools to aid them in creating, testing, and deploying applications and content that is accessible to persons with disabilities. The ironic twist about these tools is that, often, they are not accessible-persons using assistive technologies (ATs) like screen readers cannot access the information presented by these tools or must go through extraordinary means to access this information. Using the tools is time-consuming and inefficient for persons with disabilities.

This article focuses, first, on how difficult such tools are to use for persons using a screen reader like Freedom Scientific’s JAWS for Windows1, demonstrating the inefficiency and frustration produced by inaccessible accessibility tools (and by the inaccessibility of applications in general). Second, it turns to an example of a fully accessible and functional accessibility-enablement utility, Accessibility Probe, an introspection tool for both MSAA and IAccessible2-enabled applications that was built using the Eclipse Accessibility Tools Framework2 (ACTF). The article concludes with tips for developers for creating accessible accessibility tools.

Inaccessible accessibility tools

The software development community has a long history of creating tools to help in creating, testing, and deploying applications and content. Over the years, tools have also been developed to help application developers to enable their applications for accessibility or test for successful enablement.

One example of an inspection tool is Microsoft’s Inspect323 for displaying common accessibility-related properties of GUI components such as their accessible name, accessible description, accessible role, and accessible states. Other tools in the Microsoft Active Accessibility (MSAA) development and testing arsenal include AccEvent and AccExplore, which are typically used in conjunction with Inspect32 to monitor the events being fired by components within a GUI or document elements within a browser and to navigate the hierarchy of the objects that can be accessed through assistive technologies (ATs).

Another popular type of accessibility utility is a compliance validation engine like Parasoft’s WebKing4. WebKing is used by Web application developers and Web content authors to scan collections of Web pages (or entire Web sites) and generate validation reports that describe the degree to which a page (or an entire site) is accessible. WebKing can be customized to use different sets of guidelines so that, for example, one organization might use the tool to assess the accessibility of its Web content based on the Worldwide Web Consortium’s (W3C) Web Content Accessibility Guidelines5 (WCAG) while another company might use its own internal guidelines for determining the accessibility of its content.

The ironic twist about both tools (and many others like them) is that these tools themselves are inaccessible. Inaccessible can mean any of the following:

In addition, these development tools can be impossible for AT-users – either some subset of the tool functionality or all of it is unusable. This creates a situation where a tool that came in to being to quicken the development cycle is actually more time-consuming and inefficient for users of ATs.

Microsoft Inspect32

This tool is an example of one which was developed to help software engineers ensure the accessibility of their products, but which is inaccessible itself. Microsoft Inspect32 is inaccessible because:

ACTF and Accessibility Probe

The Eclipse Accessibility Tools Framework (ACTF) is, first, a collection of accessibility tools such as a compliance validation engine, inspection and event-monitoring tools, simulation and visualization utilities, and the like. Second (and, perhaps, more importantly), ACTF is a framework consisting of reusable components for building such tools or completely new types of applications such as so-called adaptive interfaces, assistive technologies, or plug-ins for providing truly usable access to existing Eclipse-based applications.

Accessibility Probe is one of the utilities included in ACTF. It combines the functionality of an inspect tool like Inspect32, a hierarchy viewer like AccExplore, and event monitor like AccEvent into one Eclipse Rich-Client Product (RCP) application6. It also supports applications that use either MSAA or IAccessible27 accessibility architectures. (Future work will likely support other accessibility architectures such as the Assistive Technology Service Provider Interface8 (ATSPI) or the Java Accessibility API9.) Unlike other tools of its kind, Accessibility Probe is accessible, to which this author can attest first-hand as a totally blind developer who oversaw the development of AccProbe!

How it works

As an RCP application, AccProbe has three views:

When AccProbe is initially launched, the Explorer View is populated with the top-level windows of the Windows Desktop. Users can use the standard keyboard controls for navigating a tree in the Explorer View to explore the hierarchy of accessible objects, find objects having a specific accessible role or name using the Find command, or select objects by tracking keyboard focus, mouse cursor position, or text caret position while moving through the application being analyzed.

Selecting a node in the Explorer view also selects the top-level window to be monitored for events. Users can, from the Event Monitor, select the events to be watched, the properties of events to be displayed, and pause and resume or start and stop event capturing. Both the events that can be monitored and the properties that are displayed depend upon the underlying accessibility architecture(s) being used. If, for example, an IAccessible2 object with a role of ‘frame’ is selected, one will see many more properties in the Properties View (and many more events from which to choose in the event monitor) than if an MSAA accessible object with role of ‘window’ is selected.

Why AccProbe is accessible and tips for tools developers

There are several reasons why AccProbe is fully accessible:

These attributes enable people who are disabled to use AccProbe. If you are developing an accessibility verification tool, these “best practices” can help you ensure that your product is accessible:

  1. Choose a platform that includes an underlying accessibility architecture and API. Make sure you enable your tool to take full advantage of these accessibility features.
  2. Take care when your tool works with controls, both controls in your application and the controls it may be trying to monitor. Ensure that users can access these controls from the keyboard, by using a mouse, and by other methods (such as the AccProbe Find command).
  3. Ensure that any views you present to the user can easily receive and retain focus.
  4. Test your application with users who have disabilities.


The creation, testing, and deployment of accessible products and content can be a tedious and burdensome task. Tools like those included in ACTF hope to mitigate this burden while providing access for software developers who have disabilities. Other tool authors should attempt to create utilities that are accessible as well. By following the techniques outlined in this article, such accessible accessibility utilities can become the rule rather than the exception.

1 See
2 This project was just given incubation status in October 2007. Its home page is and the initial project proposal can be found at
3 Inspect32 is part of the Microsoft Active Accessibility Software Development Kit (MSAA SDK). More information can be found at

4 See
5 See for v1.0 of these guidelines.
6 An Eclipse Rich-Client Platform (RCP) application is a stand-alone Java-based application built using the Eclipse framework and packaged with only the components of that framework necessary to run the application. For more information on RCP applications, see
7 IAccessible2 is an accessibility architecture that is meant to complement and extend MSAA on windows. It was recently donated to the Linux Foundation as an open standard by IBM. See
8 See
9 See