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

Microsoft Automazione interfaccia utente fornisce un set di proxy per la maggior parte dei controlli standard, ad esempio quelli usati nelle applicazioni Microsoft Win32, Windows Forms e Windows Presentation Foundation (WPF). Tuttavia, molti controlli personalizzati e controlli di terze parti non implementano provider di Automazione interfaccia utente nativi. Per essere accessibili alle applicazioni client 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 dei proxy usati dalle applicazioni client. Essa comprende i seguenti argomenti:

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

Che cos'è un proxy?

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

Che cos'è una proxy factory?

Ogni proxy richiede una data factory proxy corrispondente, ovvero un oggetto che espone l'interfaccia IUIAutomationProxyFactory . Automazione interfaccia utente gestisce una tabella interna delle voci di proxy factory, 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 dispone di un'implementazione IRawElementProviderSimple nativa, cerca una voce di fabbrica proxy le cui condizioni indicano che supporta il controllo. Automazione interfaccia utente cerca la tabella dall'inizio e quando trova una voce corrispondente, Automazione interfaccia utente chiama il metodo IUIAutomationProxyFactory::CreateProvider della factory. Se il proxy corrispondente viene creato correttamente, il Automazione interfaccia utente interrompe la ricerca e usa l'oggetto proxy appena creato. In caso contrario, Automazione interfaccia utente continua la ricerca.

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

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

Proxy Factory Mapping

Per impostazione predefinita, Automazione interfaccia utente cerca la tabella della factory proxy nell'ordine seguente.

JSON Proxy Descrizione
1 Microsoft: Proxy non controllo Per le finestre con il nome esatto della classe o il nome della classe base "ComboBoxEx32".
2 Microsoft: Proxy non controllo Per le finestre con il nome esatto della classe o il nome della classe base "WorkerW".
3 Microsoft: Proxy non controllo Per le finestre con il nome esatto della classe o il nome della classe base "SHELLDLL_DefView".
4 Microsoft: Proxy contenitore Per le finestre con il nome esatto della classe o il nome della classe base "#32770".
5 Microsoft: Proxy contenitore Per le finestre con un nome di classe o un nome di classe di base contenente "AfxControlBar".
6 Microsoft: TreeView Proxy Per le finestre con un nome di classe o un nome di classe base contenente "SysTreeView32".
7 Microsoft: ListView Proxy Per windows con un nome di classe o un nome di classe base contenente "SysListView32" (1).
8 Microsoft: ListView Proxy Per windows con un nome di classe o un nome di classe di base contenente "SysListView32" (2).
9 Microsoft: MSAA Proxy 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. Proxy 8 viene usato solo per gli elementi di elenco visibili e viene in genere usato dalle applicazioni client che funzionano solo con elementi visibili o che hanno requisiti di prestazioni rigorosi. Questi client possono rimuovere il proxy 7.

Proxy 9, l'accessibilità attiva Microsoft per Automazione interfaccia utente proxy deve sempre essere l'ultima voce della tabella. Ciò consente la funzionalità di fallback di Accessibilità attiva Microsoft per i controlli che implementano l'accessibilità attiva Microsoft, ma non Automazione interfaccia utente.

Quando si modificano le voci nella tabella proxy factory, è necessario valutare attentamente la nuova posizione delle voci. È consigliabile inserire voci per proxy personalizzati dopo i proxy non di controllo e contenitori, ma prima dell'accessibilità attiva Microsoft per Automazione interfaccia utente proxy. Inoltre, mentre è possibile avere codice nella chiamata a CreateProvider determinare se deve supportare un determinato handle di finestra (HWND), è più efficiente consentire Automazione interfaccia utente selezionare il proxy in base al nome della classe e mantenere il codice condizionale nel metodo CreateProvider al minimo.

Automazione interfaccia utente gestisce una tabella di proxy factory separata per ogni client. Quando un client modifica la tabella proxy, le modifiche influiscono solo sul client stesso; altri client non sono interessati.

Gestione dei proxy predefiniti

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

La tabella dei proxy disponibili contiene un'interfaccia IUIAutomationProxyFactoryEntry per ogni proxy. Ogni IUIAutomationProxyFactoryEntry specifica la classe IUIAutomationProxyFactory e la classe di controllo che il proxy serve e definisce la modalità di gestione degli 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 di controllo applicabile e il comportamento del proxy.

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

Guida del programmatore del provider Automazione interfaccia utente