accessibilità attiva e Automazione interfaccia utente

Microsoft Active Accessibility è l'API legacy introdotta in Windows 95 ed è stata progettata per rendere accessibili le applicazioni Windows. Microsoft Automazione interfaccia utente è il nuovo modello di accessibilità per Windows ed è destinato a soddisfare le esigenze dei prodotti assistive technology e degli strumenti di test automatizzati. Automazione interfaccia utente offre numerosi miglioramenti rispetto a Microsoft Active Accessibility. Questo argomento illustra le differenze tra le due tecnologie.

Questo argomento include le sezioni seguenti.

Linguaggi di programmazione

Microsoft Active Accessibility si basa sul com (Component Object Model) con supporto per le interfacce duali ed è quindi programmabile nei linguaggi C/C++ e scripting.

Quando è stata introdotta Automazione interfaccia utente, l'API client era limitata al codice gestito, mentre l'API del provider includeva implementazioni gestite e non gestite. Con Windows 7 è stata introdotta una nuova API client basata su COM per semplificare il programmare Automazione interfaccia utente applicazioni client in C/C++.

Server e client

In Microsoft Active Accessibility i server e i client comunicano direttamente, in gran parte tramite l'implementazione del server dell'interfaccia IAccessible .

In Automazione interfaccia utente, un servizio di base si trova tra il server (provider) e il client. Il servizio principale effettua chiamate alle interfacce implementate dai provider e fornisce servizi aggiuntivi, ad esempio la generazione di identificatori di runtime univoci per gli elementi dell'interfaccia utente. Le applicazioni client ottengono l'accesso a questo servizio principale creando un oggetto CUIAutomation. Questo oggetto supporta un set di interfacce client separate dalle interfacce del provider. Per altre informazioni, vedere Creazione dell'oggetto CUIAutomation.

Automazione interfaccia utente provider possono fornire informazioni ai client Microsoft Active Accessibility e i server Microsoft Active Accessibility possono fornire informazioni alle applicazioni client Automazione interfaccia utente. Tuttavia, poiché Microsoft Active Accessibility non espone tutte le informazioni Automazione interfaccia utente, i due modelli non sono completamente compatibili.

Elementi dell'interfaccia utente

Microsoft Active Accessibility presenta un elemento dell'interfaccia utente come interfaccia IAccessible associata a un identificatore figlio. È difficile confrontare due puntatori IAccessible per determinare se fanno riferimento allo stesso elemento.

In Automazione interfaccia utente ogni elemento viene rappresentato come oggetto che espone l'interfaccia IUIAutomationElement ai client. Gli elementi possono essere confrontati con i relativi identificatori di runtime, che vengono recuperati tramite IUIAutomationElement::GetRuntimeId.

Visualizzazioni struttura ad albero e spostamenti

Gli elementi dell'interfaccia utente sullo schermo possono essere visualizzati come struttura ad albero con il desktop come radice, le finestre dell'applicazione come elementi figlio immediati e gli elementi all'interno delle applicazioni come discendenti aggiuntivi.

In Microsoft Active Accessibility molti elementi dell'interfaccia utente irrilevanti per gli utenti finali vengono esposti nella struttura ad albero. Le applicazioni client devono esaminare tutti gli elementi dell'albero per determinare quali elementi sono significativi.

Le applicazioni client di automazione interfaccia utente visualizzano l'interfaccia utente tramite una visualizzazione filtrata. La visualizzazione contiene solo elementi che forniscono informazioni all'utente o con cui l'utente può interagire. Sono disponibili visualizzazioni predefinite che includono solo elementi di controllo e sono disponibili solo elementi di contenuto e le applicazioni client possono definire visualizzazioni personalizzate. Automazione interfaccia utente semplifica la descrizione dell'interfaccia utente all'utente e l'interazione dell'utente con le applicazioni.

In Microsoft Active Accessibility, lo spostamento tra elementi è spaziale, ad esempio lo spostamento all'elemento che si trova a sinistra sullo schermo, logico, ad esempio passando alla voce di menu successiva o all'elemento successivo nell'ordine di tabulazione in una finestra di dialogo o gerarchico, ad esempio passando al primo elemento figlio in un contenitore o da un elemento figlio al relativo elemento padre. La navigazione gerarchica è complicata dal fatto che gli elementi figlio non sono sempre oggetti che implementano IAccessible.

In Automazione interfaccia utente tutti gli elementi dell'interfaccia utente sono oggetti COM che espongono l'interfaccia IUIAutomationElement e supportano la stessa funzionalità di base. Dal punto di vista del provider, gli oggetti COM implementano un'interfaccia ereditata da IRawElementProviderSimple. La navigazione è principalmente gerarchica; cioè dai genitori ai figli, e da un fratellino all'altro. Tuttavia, lo spostamento tra elementi di pari livello ha un elemento logico, in quanto può seguire l'ordine di tabulazioni. Un client può spostarsi da qualsiasi punto di partenza, usando qualsiasi visualizzazione filtrata dell'albero, usando IUIAutomationTreeWalker. Un client può anche passare a determinati elementi figlio o discendenti usando IUIAutomationElement::FindFirst e IUIAutomationElement::FindAll. Ad esempio, è facile recuperare tutti gli elementi in una finestra di dialogo che supportano un pattern di controllo specificato.

La navigazione in Automazione interfaccia utente è più coerente rispetto a quella di Microsoft Active Accessibility. Alcuni elementi, ad esempio elenchi a discesa e finestre popup, vengono visualizzati due volte nell'albero Microsoft Active Accessibility e lo spostamento da tali elementi potrebbe avere risultati imprevisti. È difficile implementare correttamente Microsoft Active Accessibility per un controllo rebar. Automazione interfaccia utente abilita la ripetizione e il riposizionamento, in modo che un elemento possa essere posizionato in qualsiasi punto dell'albero, nonostante la gerarchia imposta dalla proprietà delle finestre.

Ruoli e tipi di controlli

Microsoft Active Accessibility usa la proprietà accRole (IAccessible::get_accRole) per recuperare una descrizione del ruolo dell'elemento nell'interfaccia utente, ad esempio ROLE_SYSTEM_SLIDER o ROLE_SYSTEM_MENUITEM. Il ruolo di un elemento rappresenta l'indicazione principale della relativa funzionalità disponibile. L'interazione con un controllo viene ottenuta usando metodi fissi come IAccessible::accSelect e IAccessible::accDoDefaultAction. L'interazione tra l'applicazione client e l'interfaccia utente è limitata a ciò che è possibile eseguire tramite IAccessible.

Al contrario, Automazione interfaccia utente disaccoppia il tipo di controllo dell'elemento, descritto dalla proprietà IUIAutomationElement::CurrentControlType (o IUIAutomationElement::CachedControlType), dalla funzionalità prevista. La funzionalità è determinata dai pattern di controllo che sono supportati dal provider tramite la relativa implementazione di interfacce specializzate. I pattern di controllo possono essere combinati per descrivere il set completo di funzionalità supportate da un particolare elemento dell'interfaccia utente. Alcuni provider devono supportare un modello di controllo specifico. Ad esempio, il provider di una casella di controllo deve supportare il pattern di controllo Attiva/ Disattiva. Altri provider sono tenuti a supportare uno o più di un set di pattern di controllo. Ad esempio, un pulsante deve supportare l'interruttore o il pattern di controllo Invoke . Altri ancora non supportano schemi di controllo. Ad esempio, un riquadro che non può essere spostato, ridimensionato o ancorato non dispone di pattern di controllo.

Automazione interfaccia utente supporta controlli personalizzati, identificati da UIA_CustomControlTypeId costante e può essere descritta dalla proprietà IUIAutomationElement::CurrentLocalizedControlType (o IUIAutomationElement::CachedLocalizedControlType).

La tabella seguente esegue il mapping dei ruoli dell'oggetto Microsoft Active Accessibility ai tipi di controllo Automazione interfaccia utente.

Ruolo Active Accessibility Tipo di controllo di automazione interfaccia utente
ROLE_SYSTEM_PUSHBUTTON Button
ROLE_SYSTEM_CLIENT Calendario
ROLE_SYSTEM_CHECKBUTTON CheckBox
ROLE_SYSTEM_COMBOBOX ComboBox
ROLE_SYSTEM_CLIENT Vedere Tipi di controllo personalizzati.
ROLE_SYSTEM_LIST DataGrid
ROLE_SYSTEM_LISTITEM DataItem
ROLE_SYSTEM_DOCUMENT Documento
ROLE_SYSTEM_TEXT Modifica
ROLE_SYSTEM_GROUPING Raggruppa
ROLE_SYSTEM_LIST Intestazione
ROLE_SYSTEM_COLUMNHEADER HeaderItem
ROLE_SYSTEM_LINK Hyperlink
ROLE_SYSTEM_GRAPHIC Image
ROLE_SYSTEM_LIST Elenco
ROLE_SYSTEM_LISTITEM ListItem
ROLE_SYSTEM_MENUPOPUP Menu
ROLE_SYSTEM_MENUBAR MenuBar
ROLE_SYSTEM_MENUITEM MenuItem
ROLE_SYSTEM_PANE Riquadro
ROLE_SYSTEM_PROGRESSBAR ProgressBar
ROLE_SYSTEM_RADIOBUTTON RadioButton
ROLE_SYSTEM_SCROLLBAR ScrollBar
ROLE_SYSTEM_SEPARATOR Separator
ROLE_SYSTEM_SLIDER Dispositivo di scorrimento
ROLE_SYSTEM_SPINBUTTON Spinner
ROLE_SYSTEM_SPLITBUTTON SplitButton
ROLE_SYSTEM_STATUSBAR StatusBar
ROLE_SYSTEM_PAGETABLIST Tab
ROLE_SYSTEM_PAGETAB TabItem
ROLE_SYSTEM_TABLE Tabella
ROLE_SYSTEM_STATICTEXT Text
ROLE_SYSTEM_INDICATOR Thumb
ROLE_SYSTEM_TITLEBAR TitleBar
ROLE_SYSTEM_TOOLBAR ToolBar
ROLE_SYSTEM_TOOLTIP ToolTip
ROLE_SYSTEM_OUTLINE Albero
ROLE_SYSTEM_OUTLINEITEM TreeItem
ROLE_SYSTEM_WINDOW Window

 

Stati e proprietà

Gli elementi di Microsoft Active Accessibility supportano un set comune di proprietà. Alcune proprietà, ad esempio accState, devono descrivere condizioni diverse, a seconda del ruolo dell'elemento. I server devono implementare tutti i metodi di IAccessible che restituiscono una proprietà, anche quelle non rilevanti per l'elemento.

Automazione interfaccia utente definisce proprietà aggiuntive, alcune delle quali corrispondono agli stati in Microsoft Active Accessibility. Alcune proprietà sono comuni a tutti gli elementi, ma altre proprietà sono specifiche dei tipi di controllo e dei pattern di controllo. Un provider Automazione interfaccia utente non deve implementare proprietà irrilevanti, ma può restituire un valore Null per qualsiasi proprietà non supportata. Il servizio principale Automazione interfaccia utente può ottenere alcune proprietà dal provider di finestre predefinito e queste vengono amalgamate con proprietà implementate in modo esplicito dal provider.

Oltre a supportare molte altre proprietà, Automazione interfaccia utente consente prestazioni migliori consentendo la memorizzazione nella cache delle proprietà.

Nella tabella seguente viene illustrata la corrispondenza tra alcune proprietà nei due modelli. Per le descrizioni degli ID delle proprietà Automazione interfaccia utente, vedere Identificatori delle proprietà degli elementi di Automazione.

Funzione di accesso alle proprietà Active Accessibility ID proprietà automazione interfaccia utente Osservazioni:
get_accKeyboardShortcut UIA_AccessKeyPropertyId o UIA_AcceleratorKeyPropertyId UIA_AccessKeyPropertyId ha la precedenza se sono presenti entrambi.
get_accName UIA_NamePropertyId
get_accRole UIA_ControlTypePropertyId Vedere la tabella precedente per il mapping dei ruoli ai tipi di controllo.
get_accValue UIA_ValueValuePropertyId o UIA_RangeValueValuePropertyId Valido solo per i tipi di controllo che supportano IUIAutomationValuePattern o IUIAutomationRangeValuePattern. I valori di intervallo vengono normalizzati a 0-100, in modo che siano coerenti con il comportamento di Accessibilità di Microsoft Active. I valori sono rappresentati come stringhe.
get_accHelp UIA_HelpTextPropertyId
accLocation UIA_BoundingRectanglePropertyId
get_accDescription Non supportato. accDescription non ha una specifica chiara in Microsoft Active Accessibility, che ha portato a server che inserisce diverse informazioni in questa proprietà.
get_accHelpTopic Non supportato.

 

La tabella seguente illustra gli ID delle proprietà Automazione interfaccia utente che corrispondono alle costanti dello stato dell'oggetto Microsoft Active Accessibility.

Stato di Active Accessibility Proprietà di automazione interfaccia utente Attiva la modifica dello stato winEvent?
STATE_SYSTEM_CHECKED UIA_ToggleToggleStatePropertyId casella di controllo. UIA_SelectionItemIsSelectedPropertyId per il pulsante di opzione. Y
STATE_SYSTEM_COLLAPSED UIA_ExpandCollapseExpandCollapseStatePropertyId (valore = ExpandCollapseState_Collapsed). Y
STATE_SYSTEM_EXPANDED UIA_ExpandCollapseExpandCollapseStatePropertyId (valore = ExpandCollapseState_Expanded o ExpandCollapseState_PartiallyExpanded). Y
STATE_SYSTEM_FOCUSABLE UIA_IsKeyboardFocusablePropertyId. N
STATE_SYSTEM_FOCUSED UIA_HasKeyboardFocusPropertyId. N
STATE_SYSTEM_HASPOPUP UIA_ExpandCollapseExpandCollapseStatePropertyId per le voci di menu. N
STATE_SYSTEM_INVISIBLE UIA_IsOffscreenPropertyId (value = True e IUIAutomationElement::GetClickablePoint ha esito negativo). N
STATE_SYSTEM_LINKED UIA_ControlTypePropertyId (valore = UIA_HyperlinkControlTypeId). N
STATE_SYSTEM_MIXED UIA_ToggleToggleStatePropertyId (valore = ToggleState_Indeterminate. N
STATE_SYSTEM_MOVEABLE UIA_TransformCanMovePropertyId. N
STATE_SYSTEM_MULTISELECTABLE UIA_SelectionCanSelectMultiplePropertyId. N
STATE_SYSTEM_OFFSCREEN UIA_IsOffscreenPropertyId. N
STATE_SYSTEM_PROTECTED UIA_IsPasswordPropertyId. N
STATE_SYSTEM_READONLY UIA_RangeValueIsReadOnlyPropertyId e UIA_ValueIsReadOnlyPropertyId. N
STATE_SYSTEM_SELECTABLE UIA_IsSelectionItemPatternAvailablePropertyId . N
STATE_SYSTEM_SELECTED UIA_SelectionItemIsSelectedPropertyId. N
STATE_SYSTEM_SIZEABLE UIA_TransformCanResizePropertyId. N
STATE_SYSTEM_UNAVAILABLE UIA_IsEnabledPropertyId. Y

 

Per un elenco completo degli ID proprietà, vedere Identificatori di proprietà.

Eventi

A differenza di Microsoft Active Accessibility, il meccanismo di eventi in Automazione interfaccia utente, non si basa sul routing degli eventi di Windows, strettamente legato agli handle di finestra e non richiede che l'applicazione client configuri hook. Le sottoscrizioni agli eventi possono essere ottimizzate per parti specifiche dell'albero, non solo per eventi specifici. I provider possono anche ottimizzare la generazione di eventi tenendo traccia degli eventi da ascoltare.

È anche più semplice per i client recuperare gli elementi che generano eventi perché vengono passati direttamente al callback dell'evento. Le proprietà dell'elemento vengono recuperate automaticamente, se è stata specificata una richiesta di cache quando il client ha sottoscritto l'evento.

Nella tabella seguente viene illustrata la corrispondenza delle costanti degli eventi di Microsoft Active Accessibility e degli ID evento Automazione interfaccia utente.

WinEvent ID evento Automazione interfaccia utente
EVENT_OBJECT_ACCELERATORCHANGE UIA_AcceleratorKeyPropertyId modifica della proprietà.
EVENT_OBJECT_CONTENTSCROLLED UIA_ScrollVerticalScrollPercentPropertyId o UIA_ScrollHorizontalScrollPercentPropertyId modifica della proprietà sulle barre di scorrimento associate.
EVENT_OBJECT_CREATE UIA_StructureChangedEventId.
EVENT_OBJECT_DEFACTIONCHANGE Nessun equivalente.
EVENT_OBJECT_DESCRIPTIONCHANGE Nessun equivalente esatto; ad esempio UIA_HelpTextPropertyId o UIA_LocalizedControlTypePropertyId modifica della proprietà.
EVENT_OBJECT_DESTROY UIA_StructureChangedEventId.
EVENT_OBJECT_FOCUS UIA_AutomationFocusChangedEventId.
EVENT_OBJECT_HELPCHANGE UIA_HelpTextPropertyId modifica.
EVENT_OBJECT_HIDE UIA_StructureChangedEventId.
EVENT_OBJECT_LOCATIONCHANGE UIA_BoundingRectanglePropertyId modifica della proprietà.
EVENT_OBJECT_NAMECHANGE UIA_NamePropertyId modifica della proprietà.
EVENT_OBJECT_PARENTCHANGE UIA_StructureChangedEventId.
EVENT_OBJECT_REORDER Non usato in modo coerente in Microsoft Active Accessibility. Nessun evento direttamente corrispondente è definito in Automazione interfaccia utente.
EVENT_OBJECT_SELECTION UIA_SelectionItem_ElementSelectedEventId.
EVENT_OBJECT_SELECTIONADD UIA_SelectionItem_ElementAddedToSelectionEventId.
EVENT_OBJECT_SELECTIONREMOVE UIA_SelectionItem_ElementRemovedFromSelectionEventId.
EVENT_OBJECT_SELECTIONWITHIN Nessun equivalente.
EVENT_OBJECT_SHOW UIA_StructureChangedEventId.
EVENT_OBJECT_STATECHANGE Vari eventi di modifica delle proprietà.
EVENT_OBJECT_VALUECHANGE UIA_RangeValueValuePropertyId e UIA_ValueValuePropertyId modificati.
EVENT_SYSTEM_ALERT Nessun equivalente.
EVENT_SYSTEM_CAPTUREEND Nessun equivalente.
EVENT_SYSTEM_CAPTURESTART Nessun equivalente.
EVENT_SYSTEM_CONTEXTHELPEND Nessun equivalente.
EVENT_SYSTEM_CONTEXTHELPSTART Nessun equivalente.
EVENT_SYSTEM_DIALOGEND UIA_Window_WindowClosedEventId.
EVENT_SYSTEM_DIALOGSTART UIA_Window_WindowOpenedEventId.
EVENT_SYSTEM_DRAGDROPEND Nessun equivalente.
EVENT_SYSTEM_DRAGDROPSTART Nessun equivalente.
EVENT_SYSTEM_FOREGROUND UIA_AutomationFocusChangedEventId.
EVENT_SYSTEM_MENUEND UIA_MenuModeEndEventId.
EVENT_SYSTEM_MENUPOPUPEND UIA_MenuClosedEventId.
EVENT_SYSTEM_MENUPOPUPSTART UIA_MenuOpenedEventId.
EVENT_SYSTEM_MENUSTART UIA_MenuModeStartEventId.
EVENT_SYSTEM_MINIMIZEEND UIA_WindowWindowVisualStatePropertyId modifica della proprietà.
EVENT_SYSTEM_MINIMIZESTART UIA_WindowWindowVisualStatePropertyId modifica della proprietà.
EVENT_SYSTEM_MOVESIZEEND UIA_BoundingRectanglePropertyId modifica della proprietà.
EVENT_SYSTEM_MOVESIZESTART UIA_BoundingRectanglePropertyId modifica della proprietà.
EVENT_SYSTEM_SCROLLINGEND UIA_ScrollVerticalScrollPercentPropertyId o UIA_ScrollHorizontalScrollPercentPropertyId modifica della proprietà.
EVENT_SYSTEM_SCROLLINGSTART UIA_ScrollVerticalScrollPercentPropertyId o UIA_ScrollHorizontalScrollPercentPropertyId modifica della proprietà.
EVENT_SYSTEM_SOUND Nessun equivalente.
EVENT_SYSTEM_SWITCHEND Nessun equivalente, ma un evento UIA_AutomationFocusChangedEventId segnala che una nuova applicazione ha ricevuto lo stato attivo.
EVENT_SYSTEM_SWITCHSTART Nessun equivalente.
Nessun equivalente. UIA_MultipleViewCurrentViewPropertyId modifica della proprietà.
Nessun equivalente. UIA_ScrollHorizontallyScrollablePropertyId modifica della proprietà.
Nessun equivalente. UIA_ScrollVerticallyScrollablePropertyId modifica della proprietà.
Nessun equivalente. UIA_ScrollHorizontalScrollPercentPropertyId modifica della proprietà.
Nessun equivalente. UIA_ScrollVerticalScrollPercentPropertyId modifica della proprietà.
Nessun equivalente. UIA_ScrollHorizontalViewSizePropertyId modifica della proprietà.
Nessun equivalente. UIA_ScrollVerticalViewSizePropertyId modifica della proprietà.
Nessun equivalente. UIA_ToggleToggleStatePropertyId modifica della proprietà.
Nessun equivalente. modifica della proprietà UIA_WindowWindowVisualStatePropertyId
Nessun equivalente. UIA_AsyncContentLoadedEventId evento.
Nessun equivalente. UIA_ToolTipOpenedEventId evento.

 

Accesso alle proprietà e agli oggetti di accessibilità attivi da Automazione interfaccia utente

Una funzionalità chiave di Automazione interfaccia utente non disponibile in Microsoft Active Accessibility è la possibilità di recuperare più proprietà con una singola operazione tra processi.

I client Microsoft Active Accessibility esistenti possono sfruttare questa funzionalità usando l'interfaccia IUIAutomationLegacyIAccessiblePattern . Questa interfaccia rappresenta un pattern di controllo che espone le proprietà e i metodi di Accessibilità microsoft active sugli elementi dell'interfaccia utente. Quando si recuperano elementi, un'applicazione può richiedere che questo pattern di controllo e le relative proprietà vengano memorizzati nella cache.

IUIAutomationLegacyIAccessiblePattern consente anche ai client di ottenere proprietà di Accessibilità Microsoft Active da elementi che non dispongono di supporto nativo per IAccessible.

Le modifiche apportate alle proprietà di un oggetto IUIAutomationLegacyIAccessiblePattern non generano eventi Automazione interfaccia utente.

Aggiunta di funzionalità di Automazione interfaccia utente ai server di accessibilità attivi

Panoramica dell'albero di automazione interfaccia utente

Panoramica delle proprietà di automazione interfaccia utente

Panoramica dei tipi di controllo per l'automazione interfaccia utente

Panoramica degli eventi di automazione interfaccia utente

Accessibilità attiva Microsoft