Perplexed Owl Random Ponderings

Benjamin ‘Benilda’ Key:

June 14, 2018; August 17, 2019

Implementing the IAccessibleApplication Interface

Summary

The IAccessibleApplication interface can be used to customize how screen readers such as JAWS identify an application. Specifically, the IAccessibleApplication::get_appName function can be used to specify that JAWS should use a specific name for the application instead of deriving the name for the application from the name of the application’s executable file.

Implementation Details

C++/Windows API

Pending.

C++/ATL and MFC

In order to support the IAccessibleApplication interface in an ATL/MFC application you need to use a custom IAccessible Proxy. To create a custom IAccessible Proxy do the following.

  1. Create a customized version of the IAccessibleProxyImpl class and CAccessibleProxy class using source code obtained from atlacc.h.
  2. Add a COM_INTERFACE_ENTRY for IAccessibleApplication in the COM_MAP (BEGIN_COM_MAP/END_COM_MAP) for the custom IAccessibleProxyImpl class.
  3. Use the BEGIN_SERVICE_MAP, END_SERVICE_MAP, and SERVICE_ENTRY macros to provide an implementation of the IServiceProvider interface.
  4. Provide an override for the CWnd::CreateAccessibleProxy function to cause your windows to use the custom accessible proxy and thus your implementation of the IAccessibleApplication interface.

You should do this for every window that can gain focus in your application.

Sample Implementation

You can refer to the open source TTSApp application for additional details on how to do this. Pay special attention to the following files.

Additional Information

The following web pages supply additional information.