Condividi tramite


Automazione UI e Microsoft Active Accessibility

Annotazioni

Questa documentazione è destinata agli sviluppatori .NET Framework che vogliono usare le classi di automazione interfaccia utente gestite definite nello spazio dei nomi System.Windows.Automation. Per le informazioni più recenti sull'automazione interfaccia utente, vedere API di automazione di Windows: Automazione interfaccia utente.

Microsoft Active Accessibility era la soluzione precedente per rendere accessibili le applicazioni. Automazione interfaccia utente Microsoft è il nuovo modello di accessibilità per Microsoft Windows ed è progettato per soddisfare le esigenze dei prodotti assistive technology e degli strumenti di test automatizzati. Automazione interfaccia utente offre molti miglioramenti rispetto all'accessibilità attiva.

Questo argomento include le funzionalità principali di Automazione interfaccia utente e spiega in che modo queste funzionalità differiscono dall'accessibilità attiva.

Linguaggi di programmazione

L'accessibilità attiva si basa sul modello COM (Component Object Model) con supporto per le interfacce duali ed è quindi programmabile in linguaggi C/C++, Microsoft Visual Basic 6.0 e scripting. Automazione interfaccia utente (inclusa la libreria del provider lato client per i controlli standard) viene scritta nel codice gestito e le applicazioni client di automazione interfaccia utente vengono programmate più facilmente usando C# o Visual Basic .NET. I provider di automazione interfaccia utente, che sono implementazioni di interfaccia, possono essere scritti in codice gestito o in C/C++.

Supporto per Windows Presentation Foundation

Windows Presentation Foundation (WPF) è il nuovo modello per la creazione di interfacce utente. Gli elementi WPF non contengono il supporto nativo per l'accessibilità attiva; Tuttavia, supportano l'automazione interfaccia utente, che include il supporto di bridging per i client Active Accessibility. Solo i client scritti in modo specifico per automazione interfaccia utente possono sfruttare appieno le funzionalità di accessibilità di WPF, ad esempio il supporto avanzato per il testo.

Server e client

In Accessibilità attiva, i server e i client comunicano direttamente, in gran parte tramite l'implementazione del server di IAccessible.

In Automazione interfaccia utente un servizio di base si trova tra il server (denominato 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. Le applicazioni client usano funzioni di libreria per chiamare il servizio automazione interfaccia utente.

I provider di Automazione interfaccia utente possono fornire informazioni ai client Active Accessibility, e i server Active Accessibility possono fornire informazioni alle applicazioni client di Automazione interfaccia utente. Tuttavia, poiché l'accessibilità attiva non espone tutte le informazioni dell'automazione interfaccia utente, i due modelli non sono completamente compatibili.

Elementi dell'interfaccia utente

Active Accessibility presenta gli elementi dell'interfaccia utente come interfaccia IAccessible o identificatore secondario. È difficile confrontare due IAccessible puntatori per determinare se fanno riferimento allo stesso elemento.

In Automazione interfaccia utente ogni elemento viene rappresentato come AutomationElement oggetto . Il confronto viene eseguito usando l'operatore di uguaglianza o il Equals metodo , entrambi i quali confrontano gli identificatori di runtime univoci degli elementi.

Visualizzazioni struttura ad albero e spostamenti

Gli elementi dell'interfaccia utente (UI) 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 Accessibilità attiva molti elementi di automazione irrilevanti per gli utenti finali vengono esposti nell'albero. Le applicazioni client devono esaminare tutti gli elementi per determinare quali sono significativi.

Le applicazioni client di automazione interfaccia utente visualizzano l'interfaccia utente tramite una visualizzazione filtrata. La visualizzazione contiene solo elementi di interesse: quelli che forniscono informazioni all'utente o abilitano l'interazione. Sono disponibili visualizzazioni predefinite solo degli elementi di controllo e solo degli elementi di contenuto; Inoltre, le applicazioni possono definire visualizzazioni personalizzate. Automazione interfaccia utente semplifica l'attività di descrizione dell'interfaccia utente all'utente e consente all'utente di interagire con l'applicazione.

Lo spostamento tra gli elementi, in Accessibilità attiva, è spaziale (ad esempio, lo spostamento all'elemento che si trova a sinistra sullo schermo), logico (ad esempio, lo spostamento alla voce di menu successiva o l'elemento successivo nell'ordine di tabulazione all'interno di una finestra di dialogo) o gerarchico (ad esempio, lo spostamento del primo figlio in un contenitore o dal figlio al padre). Lo spostamento gerarchico è complicato dal fatto che gli elementi figlio non sono sempre oggetti che implementano IAccessible.

In Automazione interfaccia utente tutti gli elementi dell'interfaccia utente sono AutomationElement oggetti che supportano la stessa funzionalità di base. Dal punto di vista del provider, sono oggetti che implementano un'interfaccia ereditata da IRawElementProviderSimple. La navigazione è principalmente gerarchica: dai padri ai figli e da un fratello all'altro. Lo spostamento tra elementi di pari livello ha un elemento logico, in quanto può seguire l'ordine di tabulazione. È possibile spostarsi da qualsiasi punto di partenza, usando qualsiasi visualizzazione filtrata dell'albero, usando la classe TreeWalker. È anche possibile navigare verso particolari elementi figlio o discendenti utilizzando FindFirst e FindAll; ad esempio, è molto facile recuperare tutti gli elementi all'interno di una finestra di dialogo che supportano un modello di controllo specificato.

La navigazione in UI Automation è più coerente rispetto all'Accessibilità Attiva. Alcuni elementi, ad esempio elenchi a discesa e finestre popup, vengono visualizzati due volte nell'albero Active Accessibility e lo spostamento da essi potrebbe avere risultati imprevisti. In realtà non è possibile implementare correttamente l'accessibilità attiva per un controllo rebar. Automazione interfaccia utente consente la ripetizione e il riposizionamento, in modo che un elemento possa essere posizionato ovunque nell'albero nonostante la gerarchia imposta dalla proprietà delle finestre.

Ruoli e tipi di controlli

Active Accessibility usa la accRole proprietà (IAccessible::get_actRole) 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 separa in gran parte il tipo di controllo dell'elemento (descritto dalla ControlType proprietà) 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 particolari pattern di controllo; ad esempio, il provider per una casella di controllo deve supportare il pattern Attiva/Disattiva. Altri provider devono supportare uno o più modelli di controllo; Ad esempio, un pulsante deve supportare Toggle o Invoke. Altri ancora non supportano alcun pattern di controllo; Ad esempio, un riquadro che non può essere spostato, ridimensionato o ancorato non dispone di modelli di controllo.

Automazione interfaccia utente supporta controlli personalizzati, identificati dalla Custom proprietà e possono essere descritti dalla LocalizedControlTypeProperty proprietà .

La tabella seguente illustra il mapping dei ruoli di accessibilità attiva ai tipi di controllo di automazione interfaccia utente.

Ruolo Active Accessibility Tipo di controllo automazione interfaccia utente
ROLE_SYSTEM_PULSANTE Pulsante
RUOLO_SISTEMA_CLIENTE Calendario
RUOLO_SISTEMA_PULSANTE_DA_SELEZIONE Casella di controllo
RUOLO_SISTEMA_COMBOBOX Casella combinata
RUOLO_SISTEMA_CLIENTE Personalizzato
LISTA_SISTEMA_RUOLO Griglia dei dati
RUOLO_SISTEMA_ELENCOELEMENTO Elemento di dati
RUOLO_SISTEMA_DOCUMENTO Documento
RUOLO_TESTO_SISTEMA Redigere
RUOLO_GRUPPO_SISTEMA Gruppo
LISTA_SISTEMA_RUOLO Intestazione
RUOLO_SISTEMA_INTESTAZIONE_COLONNA Elemento di intestazione
Ruolo_sistema_collegamento Collegamento ipertestuale
Ruolo del Sistema Grafico Immagine
LISTA_SISTEMA_RUOLO Elenco
RUOLO_SISTEMA_ELENCOELEMENTO Elemento dell'elenco
ROLE_SYSTEM_MENUPOPUP Menù
RUOLO_SISTEMA_BARRA_DEI_MENU Barra dei menu
ROLE_SYSTEM_MENUITEM Voce di menu
RUOLO_PANORAMA_SISTEMA Pannello
RUOLO_SISTEMA_BARRENAPROGRESSO Barra di avanzamento
Ruolo del Sistema: Pulsante di Opzione Pulsante di opzione
RUOLO_SISTEMA_BARRA_SCORRIMENTO Barra di scorrimento
RUOLO_DI_SISTEMA_SEPARATORE Separatore
RUOLO_SISTEMA_CURSORE Cursore
ROLE_SYSTEM_SPINBUTTON (Pulsante di scorrimento) Casella di selezione
RUOLO_SISTEMA_PULSANTE_DIVISO Pulsante Dividi
RUOLO_SISTEMA_BARRA_DI_STATO Barra di stato
ListaSchedeSistema Scheda
RUOLO_SISTEMA_SCHEDA_PAGINA Elemento scheda
ROLE_SYSTEM_TABLE Tabella
RUOLO_SISTEMA_TESTO_STATICO Testo
INDICATORE_DI_SISTEMA Pollice
RUOLO_SISTEMA_BARRA_DEL_TITOLO Barra del titolo
RUOLO_BARRA_DEGLI_STRUMENTI_SISTEMA Barra degli strumenti
RUOLO_TOOLTIP_DI_SISTEMA Suggerimento
RUOLO_SISTEMA_SCHEMA Albero
Ruolo_sistema_elemento_di_contorno Elemento dell'albero
RUOLO_SISTEMA_FINESTRA Finestra

Per altre informazioni sui diversi tipi di controllo, vedere Tipi di controllo di automazione interfaccia utente.

Stati e proprietà

In Accessibilità attiva gli elementi supportano un set comune di proprietà e alcune proprietà (ad esempio accState) devono descrivere elementi molto diversi, a seconda del ruolo dell'elemento. I server devono implementare tutti i metodi di IAccessible che restituiscono una proprietà, anche quelli che non sono rilevanti per l'elemento.

Automazione interfaccia utente definisce molte altre proprietà, alcune delle quali corrispondono agli stati in Accessibilità attiva. Alcuni sono comuni a tutti gli elementi, ma altri sono specifici per i tipi di controllo e i pattern di controllo. Le proprietà sono distinte dagli identificatori univoci e la maggior parte delle proprietà può essere recuperata usando un singolo metodo GetCurrentPropertyValue o GetCachedPropertyValue. Molte proprietà sono facilmente recuperabili dalle funzioni di accesso alle Current proprietà e Cached .

Un provider di automazione interfaccia utente non deve implementare proprietà irrilevanti, ma può semplicemente restituire un null valore per qualsiasi proprietà non supportata. Inoltre, il servizio di base di 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 offre prestazioni migliori consentendo il recupero di più proprietà con una singola chiamata tra processi.

Nella tabella seguente viene illustrata la corrispondenza tra le proprietà nei due modelli.

Funzione di accesso alle proprietà Active Accessibility ID proprietà automazione interfaccia utente Osservazioni:
get_accKeyboardShortcut AccessKeyProperty o AcceleratorKeyProperty AccessKeyProperty ha la precedenza se sono presenti entrambi.
get_accName NameProperty
get_accRole ControlTypeProperty Vedere la tabella precedente per il mapping dei ruoli ai tipi di controllo.
get_accValue ValuePattern.ValueProperty

RangeValuePattern.ValueProperty
Valido solo per i tipi di controllo che supportano ValuePattern o RangeValuePattern. I valori RangeValue vengono normalizzati in 0-100, in modo che siano coerenti con il comportamento MSAA. Gli elementi valore usano una stringa.
get_accHelp HelpTextProperty
accLocation BoundingRectangleProperty
get_accDescription Non supportato nell'automazione dell'interfaccia utente accDescription non aveva una specifica chiara all'interno di MSAA, il che ha portato i provider a inserire informazioni diverse in questa proprietà.
get_accHelpTopic Non supportato nell'automazione dell'interfaccia utente

La tabella seguente illustra le proprietà di automazione interfaccia utente corrispondenti alle costanti di stato di Accessibilità attiva.

Stato di Active Accessibility Proprietà dell'automazione dell'interfaccia utente Attiva il cambiamento di stato?
STATO_SISTEMA_CONTROLLATO Per casella di controllo, ToggleStateProperty

Per il pulsante di opzione, IsSelectedProperty
STATO_SISTEMA_COLLASSATO ExpandCollapseState = Collapsed
STATO_SISTEMA_ESPANSO ExpandCollapseState = Expanded o PartiallyExpanded
STATO_SISTEMA_FOCALIZZABILE IsKeyboardFocusableProperty N
Stato_sistema_centralizzato HasKeyboardFocusProperty N
STATO_SISTEMA_HASPUPUP ExpandCollapsePattern per voci di menu N
STATE_SYSTEM_INVISIBLE IsOffscreenProperty = True e GetClickablePoint causa NoClickablePointException N
STATO_SISTEMA_COLLEGATO ControlTypeProperty =

Hyperlink
N
STATO_SISTEMA_MISTO ToggleState = Indeterminate N
STATO DEL SISTEMA MOBILE CanMoveProperty N
STATO_SISTEMA_MULTISELECTABILE CanSelectMultipleProperty N
STATO_SISTEMA_FUORI_SCHERMO IsOffscreenProperty = Vero N
STATO_SISTEMA_PROTETTO IsPasswordProperty N
STATO_SISTEMA_SOLO_LETTURA RangeValuePattern.IsReadOnlyProperty e ValuePattern.IsReadOnlyProperty N
STATO_SISTEMA_SELEZIONABILE SelectionItemPattern è supportato N
STATO_SISTEMA_SELEZIONATO IsSelectedProperty N
STATO_SISTEMA_DIMENSIONABILE CanResize N
STATE_SYSTEM_UNAVAILABLE (Sistema non disponibile) IsEnabledProperty

Gli stati seguenti non sono stati implementati dalla maggior parte dei server di controllo di accessibilità attiva o non hanno equivalenti in Automazione interfaccia utente.

Stato di Active Accessibility Osservazioni:
STATO_SISTEMA_OCCUPATO Non disponibile nell'automazione dell'interfaccia utente
STATO_SISTEMA_PREDEFINITO Non disponibile nell'automazione dell'interfaccia utente
STATO_SISTEMA_ANIMATO Non disponibile nell'automazione dell'interfaccia utente
STATE_SYSTEM_EXTSELECTABLE Non ampiamente implementato dai server di accessibilità attiva
STATO_SISTEMA_SCORRIMENTO Non ampiamente implementato dai server di accessibilità attiva
STATO_SISTEMA_AUTOLETTURA Non ampiamente implementato dai server di accessibilità attiva
STATO_SISTEMA_ATTRAVERSATO Non disponibile nell'automazione dell'interfaccia utente
Stato_Sistema_Allerta_Alta Non ampiamente implementato dai server di accessibilità attiva
STATO_SISTEMA_ALLERTA_MEDIO Non ampiamente implementato dai server di accessibilità attiva
STATO_SISTEMA_AVVISO_BASSO Non ampiamente implementato dai server di accessibilità attiva
STATO_SISTEMA_GALLEGGIANTE Non ampiamente implementato dai server di accessibilità attiva
STATE_SYSTEM_HOTTRACKED Non disponibile nell'automazione dell'interfaccia utente
STATO_SISTEMA_PREMUTO Non disponibile nell'automazione dell'interfaccia utente

Per un elenco completo degli identificatori delle proprietà di automazione interfaccia utente, vedere Ui Automation Properties Overview (Panoramica delle proprietà di automazione interfaccia utente).

Avvenimenti

Il meccanismo di eventi in UI Automation, a differenza di Active Accessibility, non si basa sul routing degli eventi di Windows (strettamente legato agli handle delle finestre) e non richiede che l'applicazione client configuri degli hook. Le sottoscrizioni agli eventi possono essere ottimizzate non solo per eventi specifici, ma anche per parti specifiche dell'albero. I provider possono anche ottimizzare la generazione di eventi tenendo traccia degli eventi che vengono ascoltati.

È anche più semplice per i clienti recuperare gli elementi che generano eventi, perché vengono passati direttamente alla funzione di callback dell'evento. Le proprietà dell'elemento vengono prelettura automaticamente se una richiesta di cache era attiva quando il client ha sottoscritto l'evento.

La tabella seguente illustra la corrispondenza degli eventi WinEvent di Accessibilità attiva e automazione interfaccia utente.

WinEvent Identificatore dell'evento di automazione interfaccia utente
EVENT_OGGETTO_CAMBIODELL'ACCELERATORE AcceleratorKeyProperty modifica della proprietà
SCORRIMENTO_CONTENUTO_OGGETTO_ESEGUITO VerticalScrollPercentProperty o HorizontalScrollPercentProperty modifica della proprietà sulle barre di scorrimento associate
Creazione di oggetto evento StructureChangedEvent
EVENT_OBJECT_DEFACTIONCHANGE Nessun equivalente
CAMBIO_DESCRIZIONE_OGGETTO_EVENTO Nessun equivalente esatto; forse HelpTextProperty o LocalizedControlTypeProperty modifica proprietà
EVENTO_OGGETTO_DISTRUGGI StructureChangedEvent
Evento_Oggetto_Focus AutomationFocusChangedEvent
EVENT_OBJECT_HELPCHANGE HelpTextProperty cambiare
EVENTO_NASCONDI_OGGETTO StructureChangedEvent
EVENTO_CAMBIO_POSIZIONE_OGGETTO BoundingRectangleProperty modifica della proprietà
EVENTO_CAMBIAMENTO_NOME_OGGETTO NameProperty modifica della proprietà
EVENTO_CAMBIAMENTO_GENITORE_OGGETTO StructureChangedEvent
RIORDINA_OGGETTO_EVENTO Non usato in modo coerente nell'accessibilità attiva. Nessun evento direttamente corrispondente è definito in Automazione interfaccia utente.
SELEZIONE_OGGETTO_EVENTO ElementSelectedEvent
EVENT_OBJECT_AGGIUNTA_SELEZIONE ElementAddedToSelectionEvent
EVENT_OBJECT_SELECTIONREMOVE ElementRemovedFromSelectionEvent
EVENT_OBJECT_SELECTIONWITHIN Nessun equivalente
EVENT_OBJECT_SHOW StructureChangedEvent
EVENTO_CAMBIAMENTO_STATO_OGGETTO Vari eventi di modifica delle proprietà
EVENT_OBJECT_VALUECHANGE RangeValuePattern.ValueProperty e ValuePattern.ValueProperty modificati
AVVISO_DI_SISTEMA_EVENTO 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 WindowClosedEvent
EVENT_SYSTEM_DIALOGSTART WindowOpenedEvent
EVENTO_DI_SISTEMA_FINE_TRASCINA_E_RILASCIA Nessun equivalente
EVENT_SYSTEM_DRAGDROPSTART Nessun equivalente
EVENTO_SISTEMA_IN_PRIMO_PIANO AutomationFocusChangedEvent
EVENT_SYSTEM_MENUEND MenuClosedEvent
EVENT_SYSTEM_MENUPOPUPEND MenuClosedEvent
EVENT_SYSTEM_MENUPOPUPSTART MenuOpenedEvent
EVENT_SYSTEM_MENUSTART MenuOpenedEvent
EVENT_SYSTEM_MINIMIZEEND WindowVisualStateProperty modifica della proprietà
EVENT_SYSTEM_MINIMIZESTART WindowVisualStateProperty modifica della proprietà
EVENT_SYSTEM_MOVESIZEEND BoundingRectangleProperty modifica della proprietà
EVENT_SYSTEM_MOVESIZESTART BoundingRectangleProperty modifica della proprietà
EVENTO_SISTEMA_FINESCORRIMENTO VerticalScrollPercentProperty o HorizontalScrollPercentProperty modifica della proprietà
EVENT_SYSTEM_SCROLLINGSTART VerticalScrollPercentProperty o HorizontalScrollPercentProperty modifica della proprietà
EVENTO_SUONO_SISTEMA Nessun equivalente
EVENT_SYSTEM_SWITCHEND Nessun equivalente, ma un AutomationFocusChangedEvent evento segnala che una nuova applicazione ha ricevuto il focus
EVENT_SYSTEM_SWITCHSTART Nessun equivalente
Nessun equivalente CurrentViewProperty modifica della proprietà
Nessun equivalente HorizontallyScrollableProperty modifica della proprietà
Nessun equivalente VerticallyScrollableProperty modifica della proprietà
Nessun equivalente HorizontalScrollPercentProperty modifica della proprietà
Nessun equivalente VerticalScrollPercentProperty modifica della proprietà
Nessun equivalente HorizontalViewSizeProperty modifica della proprietà
Nessun equivalente VerticalViewSizeProperty modifica della proprietà
Nessun equivalente ToggleStateProperty modifica della proprietà
Nessun equivalente WindowVisualStateProperty modifica della proprietà
Nessun equivalente evento AsyncContentLoadedEvent
Nessun equivalente ToolTipOpenedEvent

Sicurezza

Alcuni IAccessible scenari di personalizzazione richiedono di incapsulare una base IAccessible ed effettuare delle chiamate ad essa. Ciò comporta implicazioni per la sicurezza, poiché un componente parzialmente attendibile non deve essere un intermediario in un percorso di codice.

Il modello di automazione dell'interfaccia utente elimina la necessità per i provider di fare riferimento ad altro codice del provider. Il servizio di base di Automazione interfaccia utente esegue tutte le aggregazioni necessarie.

Vedere anche