Implementazione di un provider di automazione interfaccia utente Client-Side (proxy)

Automazione interfaccia utente Microsoft fornisce un set di proxy per la maggior parte dei controlli standard, ad esempio quelli usati nelle applicazioni Microsoft Win32, Windows Form e Windows Presentation Foundation (WPF). Tuttavia, molti controlli personalizzati e controlli di terze parti non implementano i provider di automazione interfaccia utente nativi. Per essere accessibili alle applicazioni client di automazione interfaccia utente, questi controlli devono essere forniti con provider lato client, noti anche come provider proxy o proxy.

Questo argomento descrive come scrivere un provider proxy per un controllo non supportato e aggiungerlo all'elenco di proxy usati dalle applicazioni client. Essa comprende i seguenti argomenti:

Per esempi di codice che illustrano come implementare i provider proxy, vedere procedure per i provider di automazione interfaccia utente.

Che cos'è un proxy?

Un provider lato client, o proxy, è un oggetto che implementa l'interfaccia IRawElementProviderSimple per conto di un controllo che non ha un'implementazione di IRawElementProviderSimple . Senza un proxy, questo controllo è in gran parte opaco per l'automazione dell'interfaccia utente, che può fornire solo le informazioni di base disponibili dall'handle di finestra (HWND), ad esempio la posizione del controllo.

Che cos'è una factory proxy?

Ogni proxy richiede una Factory proxy corrispondente, ovvero un oggetto che espone l'interfaccia IUIAutomationProxyFactory . Automazione interfaccia utente gestisce una tabella interna di voci di Factory proxy, ognuna delle quali contiene un riferimento alla Factory proxy per ogni proxy e un set di condizioni. Quando automazione interfaccia utente rileva un controllo che non ha un'implementazione IRawElementProviderSimple nativa, Cerca una voce di Factory proxy le cui condizioni indicano che supporta il controllo. Automazione interfaccia utente cerca la tabella dall'inizio e quando trova una voce corrispondente, l'automazione interfaccia utente chiama il metodo IUIAutomationProxyFactory:: CreateProvider della factory. Se il proxy corrispondente viene creato correttamente, l'automazione interfaccia utente interrompe la ricerca e usa l'oggetto proxy appena creato. in caso contrario, l'automazione interfaccia utente continua la ricerca.

Un'applicazione client crea un'istanza di una voce di Factory proxy usando il metodo IUIAutomation:: CreateProxyFactoryEntry , che restituisce un puntatore a interfaccia IUIAutomationProxyFactoryEntry . I client usano i metodi esposti da IUIAutomationProxyFactoryEntry per specificare il set di condizioni che la Factory proxy usa per la creazione del proxy.

Quando chiama IUIAutomationProxyFactory:: CreateProvider, l'automazione interfaccia utente passa i parametri che l'oggetto Factory proxy può usare per determinare se il proxy supporta adeguatamente il controllo personalizzato. In tal caso, la factory del proxy crea un'istanza del proxy e restituisce il puntatore all'interfaccia IRawElementProviderSimple ; in caso contrario, restituisce un puntatore null .

Mapping di Factory proxy

Per impostazione predefinita, l'automazione interfaccia utente cerca nella tabella del proxy Factory nell'ordine seguente.

JSON Proxy Descrizione
1 Microsoft: proxy non di controllo Per Windows con il nome della classe o il nome della classe di base "ComboBoxEx32".
2 Microsoft: proxy non di controllo Per Windows con il nome della classe o il nome della classe di base "WorkerW".
3 Microsoft: proxy non di controllo Per Windows con il nome della classe o il nome della classe di base "SHELLDLL _ DefView".
4 Microsoft: proxy contenitore Per Windows con il nome della classe o il nome della classe di base " # 32770".
5 Microsoft: proxy contenitore Per Windows con un nome di classe o un nome di classe di base contenente "AfxControlBar".
6 Microsoft: TreeView proxy Per Windows con un nome di classe o un nome di classe di base contenente "SysTreeView32".
7 Microsoft: proxy ListView Per Windows con un nome di classe o un nome di classe di base contenente "SysListView32" (1).
8 Microsoft: proxy ListView Per Windows con un nome di classe o un nome di classe di base che contiene "SysListView32" (2).
9 Microsoft: proxy MSAA Per qualsiasi finestra.

 

I proxy 7 e 8 sono voci duplicate per il controllo SysListView32. Senza modifiche, il proxy 7 viene sempre usato per il controllo SysListView32 e il proxy 8 non viene mai usato. Il proxy 8 viene usato solo per gli elementi di elenco visibili e viene in genere usato dalle applicazioni client che funzionano solo con gli elementi visibili o con requisiti di prestazioni rigidi. Questi client possono rimuovere il proxy 7.

Il proxy 9, il Active Accessibility Microsoft al proxy di automazione interfaccia utente, deve essere sempre l'ultima voce nella tabella. Questo consente la funzionalità di fallback di Microsoft Active Accessibility per i controlli che implementano Microsoft Active Accessibility, ma non l'automazione dell'interfaccia utente.

Quando si modificano le voci nella tabella del proxy Factory, è necessario valutare con attenzione la nuova posizione delle voci. Si consiglia di inserire le voci per i proxy personalizzati dopo i proxy del contenitore e non di controllo, ma prima che Microsoft Active Accessibility al proxy di automazione interfaccia utente. Inoltre, anche se è possibile che il codice nella chiamata a CreateProvider determini se deve supportare un handle di finestra (HWND) specifico, è più efficiente consentire a automazione interfaccia utente di selezionare il proxy in base al nome della classe e mantenere il codice condizionale nel metodo CreateProvider come minimo.

Automazione interfaccia utente gestisce una tabella Factory proxy separata per ogni client. Quando un client modifica la tabella proxy, le modifiche interessano solo il client stesso; gli altri client non sono interessati.

Gestione dei proxy predefiniti

Quando un'applicazione client crea l'oggetto CUIAutomation , la tabella Factory proxy contiene inizialmente solo le voci per i provider di proxy predefiniti per i controlli standard. Usando l'interfaccia IUIAutomationProxyFactoryMapping , i client possono aggiungere nuove voci, rimuovere le voci indesiderate, modificare l'ordine delle voci e così via. Un client può recuperare un puntatore all'interfaccia IUIAutomationProxyFactoryMapping chiamando il metodo IUIAutomation::P roxyfactorymapping .

La tabella dei proxy disponibili contiene un'interfaccia IUIAutomationProxyFactoryEntry per ogni proxy. Ogni IUIAutomationProxyFactoryEntry specifica il IUIAutomationProxyFactory e la classe del controllo che il proxy serve e definisce il modo in cui devono essere gestiti gli eventi.

La tabella dei proxy è rappresentata da un'interfaccia IUIAutomationProxyFactoryMapping , che può essere ottenuta dalla proprietà IUIAutomation::P roxyfactorymapping . Un'applicazione può usare i metodi IUIAutomationProxyFactoryMapping per aggiungere ed eliminare proxy. Per creare una nuova voce da aggiungere a questa tabella, usare IUIAutomation:: CreateProxyFactoryEntry per ottenere l'interfaccia e quindi usare i metodi IUIAutomationProxyFactoryEntry per definire la classe del controllo applicabile e il comportamento del proxy.

Come creare un provider di automazione interfaccia utente di Client-Side (proxy)

Guida per programmatori del provider di automazione interfaccia utente