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
- Server e client
- Elementi dell'interfaccia utente
- Visualizzazioni e navigazione ad albero
- Ruoli e tipi di controllo
- Stati e proprietà
- Eventi
- Accesso alle proprietà e agli oggetti di accessibilità attivi da Automazione interfaccia utente
- Argomenti correlati
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.
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.