What do the MSAA Properties really mean?

Here’s a collective summary of what the different MSAA Properties really mean.

Reference: https://msdn.microsoft.com/library/en-us/msaa/msaaccgd_95kk.asp

IAccessible::get_accName

Every object must have a name. AccExplorer cannot show “NAMELESS” for this object. In addition, the AA name needs to be unique for every control on the dialog.

Exceptions:

Suppose you had a dialog with two buttons called “Browse.” As long as the tab order was correct, so you know which control was before each of the browse buttons, the names do not need to be unique; however, you would get extra points in the accessibility space if you did so.

IAccessible::get_accRole

Every object must have a role as defined in oleacc.h. The role defines which properties and methods make sense to implement and how to implement them for the control. If the role isn’t correct, the control will not be accessible to an assistive technology.

IAccessible::get_accState

Every object must have a state as defined in oleacc.h. The state describes what sort of state the control is in, whether it is available, invisible, selected, checked, and so forth. It is fundamentally important that the state correctly correspond to the actual window state of the control. For example, if a checkbox is checked, the “checked” state bit must be set.

If none of the state bits are set, the control is in a “normal” state. Actually, IAccessible::get_accState will return 0, so AccExplorer and Inspect will just show normal as the state text.

IAccessible::get_accParent

Every object has a parent. Most of the time, an object’s parent is its invisible window wrapper, needed for things like scrollbars, grip controls, and so forth. If the object is an item like a list box item, tree view item, its parent is the list box or tree view control.

IAccessible::get_accChildCount

Returns the number of children. If there are no children, return 0.

IAccessible::get_accDescription

This property is required for list boxes or list view controls where there are multiple columns. The description field is used to show the content in these secondary columns. 

The description property can also be used when you want to describe any picture or image on the control (say a button with the picture of a printer), but it can be used to supply additional information when it isn’t clear what the control does from the Name, Role, State, Value… etc, properties.  Usually, it depends on the AT whether this property is read. 

IAccessible::get_accDefaultAction

This property is a string from oleaccrc.dll that describes the default action that will occur when executing IAccessible::DoDefaultAction. For example, the default action of a push button is “Press”.

The default action may change depending on the state of the control. For example, if a checkbox is checked, the default action changes from “check” to “uncheck”.

IAccessible::get_accKeyboardShortcut

Returns the mnemonic, or the underlined letter, for a given control. See https://blogs.msdn.com/saraford/archive/2004/04/16/114779.aspx for more info.

IAccessible::get_accValue

Depends on the control whether to implement this property. Usually, if the control has additional info that cannot be conveyed via its name, like an edit box that has text or progress bar status, this information is used in the value. But, make sure you’re using a role that make sense to contain a value. If you put a value on a button, it might never be read by an AT because buttons usually don’t contain values.

IAccessible::get_accHelp

This property is when you want to give more information about what this control does. 

IAccessible::get_accHelpTopic

This is when you want to provide a URL for a given control.  Note: AccExplorer doesn’t show the HelpTopic correctly.  Inspect will show it correctly.