Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
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 |
Sì |
| STATO_SISTEMA_COLLASSATO | ExpandCollapseState = Collapsed | Sì |
| STATO_SISTEMA_ESPANSO | ExpandCollapseState = Expanded o PartiallyExpanded | Sì |
| 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 | Sì |
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.