Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Microsoft UI Automation tillhandahåller en uppsättning proxyservrar för de flesta standardkontroller, till exempel de som används i Program för Microsoft Win32, Windows Forms och Windows Presentation Foundation (WPF). Många anpassade kontroller och kontroller från tredje part implementerar dock inte interna UI Automation-leverantörer. För att vara tillgängliga för UI Automation-klientprogram måste dessa kontroller vara försedda med klientsideleverantörer, även kallade proxy-leverantörereller proxy-leverantörer.
Det här avsnittet beskriver hur du skriver en proxyprovider för en kontroll som inte stöds och lägger till den i listan över proxyservrar som används av klientprogram. Den innehåller följande avsnitt:
- Vad är en proxy?
- Vad är en proxyfabrik?
- Proxy Factory-kartläggning
- Hantera standardproxyn
- Relaterade ämnen
Kodexempel som visar hur du implementerar proxyprovidrar finns i How-To Topics for UI Automation Providers.
Vad är en proxy?
En klientdelsprovider eller proxy är ett objekt som implementerar IRawElementProviderSimple--gränssnittet för en kontroll som inte har någon egen implementation av IRawElementProviderSimple-. Utan en proxy är en sådan kontroll till stor del ogenomskinlig för UI Automation, som endast kan tillhandahålla grundläggande information som är tillgänglig från fönsterhandtaget (HWND), till exempel kontrollplatsen.
Vad är en proxyfabrik?
Varje proxy kräver en motsvarande proxyfabrik, som är ett objekt som exponerar IUIAutomationProxyFactory--gränssnittet. UI Automation har en intern tabell med proxyfabriksposter, som var och en innehåller en referens till proxyfabriken för varje proxy och en uppsättning villkor. När UI Automation stöter på en kontroll som inte har en intern IRawElementProviderSimple implementering, söker den efter en proxyfabrikspost vars villkor anger att den stöder kontrollen. UI Automation söker i tabellen från början, och när den hittar en matchande post anropar UI Automation fabrikens IUIAutomationProxyFactory::CreateProvider-metod. Om den matchande proxyn har skapats slutar användargränssnittsautomationen att söka och använder det nyligen skapade proxyobjektet. annars fortsätter UI Automation att söka.
Ett klientprogram skapar en instans av en proxyfabrikspost med hjälp av metoden IUIAutomation::CreateProxyFactoryEntry, som returnerar en IUIAutomationProxyFactoryEntry gränssnittspekare. Klienter använder metoder som exponeras av IUIAutomationProxyFactoryEntry för att ange de villkor som proxyfabriken använder för att skapa proxyn.
När den anropar IUIAutomationProxyFactory::CreateProviderskickar UI Automation parametrar som proxyfabriksobjektet kan använda för att avgöra om proxyn har tillräckligt stöd för den anpassade kontrollen. I så fall skapar proxyfabriken en instans av proxyn och returnerar IRawElementProviderSimple gränssnittspekare. Annars returneras en NULL- pekare.
Mappning av proxyfabrik
Som standardläge söker UI Automation genom proxyfabrikstabellen i följande ordning.
Beställning | Proxy | Beskrivning |
---|---|---|
1 | Microsoft: Ickekontrollproxy | För fönster med det exakta klassnamnet eller basklassnamnet "ComboBoxEx32". |
2 | Microsoft: Proxy utan kontroll | För fönster med det exakta klassnamnet eller basklassnamnet "WorkerW". |
3 | Microsoft: Icke-kontrollproxy | För fönster med det exakta klassnamnet eller basklassnamnet "SHELLDLL_DefView". |
4 | Microsoft: ContainerProxy | För windows med det exakta klassnamnet eller basklassnamnet "#32770". |
5 | Microsoft: ContainerProxy | För fönster med ett klassnamn eller basklassnamn som innehåller "AfxControlBar". |
6 | Microsoft: TreeView Proxy | För fönster med ett klassnamn eller ett basklassnamn som innehåller "SysTreeView32". |
7 | Microsoft: ListView Proxy | För fönster med ett klassnamn eller basklassnamn som innehåller "SysListView32" (1). |
8 | Microsoft: ListView Proxy | För fönster med ett klassnamn eller ett basklassnamn som innehåller "SysListView32" (2). |
9 | Microsoft: MSAA Proxy | För alla fönster. |
Proxyservrarna 7 och 8 är duplicerade poster för SysListView32-kontrollen. Utan ändringar används proxy 7 alltid för SysListView32-kontrollen och proxy 8 används aldrig. Proxy 8 används endast för synliga listobjekt och används vanligtvis av klientprogram som endast fungerar med synliga element eller som har strikta prestandakrav. Dessa klienter kan ta bort proxy 7.
Proxy 9, Microsoft Active Accessibility to UI Automation-proxyn, bör alltid vara den sista posten i tabellen. Detta möjliggör fallback-funktionalitet för Microsoft Active Accessibility för kontroller som implementerar Microsoft Active Accessibility, men inte UI Automation.
När du ändrar poster i proxyfabrikstabellen bör du noggrant utvärdera posternas nya position. Vi rekommenderar att poster för anpassade proxyservrar placeras efter ickekontroll- och containerproxyn, men före Microsoft Active Accessibility to UI Automation-proxyn. Även om det är möjligt att ha kod i anropet till CreateProvider avgöra om det ska stödja ett visst fönsterhandtag (HWND), är det mer effektivt att låta UI Automation välja proxyn baserat på klassnamnet och hålla villkorskod i metoden CreateProvider till ett minimum.
UI Automation har en separat proxyfabrikstabell för varje klient. När en klient ändrar sin proxytabell påverkar ändringarna endast själva klienten. andra klienter påverkas inte.
Hantera standardproxyservrar
När ett klientprogram skapar objektet CUIAutomation innehåller proxyfabrikstabellen först endast poster för standardproxyprovidrar för standardkontroller. Med hjälp av IUIAutomationProxyFactoryMapping-gränssnittet kan klienter lägga till nya poster, ta bort oönskade poster, ändra ordningen på poster och så vidare. En klient kan hämta en IUIAutomationProxyFactoryMapping gränssnittspekare genom att anropa metoden IUIAutomation::ProxyFactoryMapping.
Tabellen med tillgängliga proxyservrar innehåller ett IUIAutomationProxyFactoryEntry--gränssnitt för varje proxy. Varje IUIAutomationProxyFactoryEntry anger IUIAutomationProxyFactory och kontrollklassen som proxyn hanterar och definierar hur händelser ska hanteras.
Tabellen med proxyservrar representeras av ett IUIAutomationProxyFactoryMapping-gränssnitt, som kan hämtas från egenskapen IUIAutomation::ProxyFactoryMapping. Ett program kan använda IUIAutomationProxyFactoryMapping metoder för att lägga till och ta bort proxyservrar. Om du vill skapa en ny post att lägga till i den här tabellen använder du IUIAutomation::CreateProxyFactoryEntry för att hämta gränssnittet och använder sedan metoderna IUIAutomationProxyFactoryEntry för att definiera den tillämpliga kontrollklassen och proxyns beteende.
Relaterade ämnen