Implementowanie dostawcy automatyzacji interfejsu użytkownika Client-Side (proxy)
Usługa Microsoft UI Automation udostępnia zestaw serwerów proxy dla większości standardowych kontrolek, takich jak te używane w aplikacjach Microsoft Win32, Windows Forms i Windows Presentation Foundation (WPF). Jednak wiele kontrolek niestandardowych i kontrolek innych firm nie implementuje natywnych dostawców automatyzacji interfejsu użytkownika. Aby były dostępne dla aplikacji klienckich automatyzacji interfejsu użytkownika, te kontrolki muszą być wyposażone w dostawców po stronie klienta, znanych również jako dostawcy proxy lub proxy .
W tym temacie opisano sposób pisania dostawcy proxy dla kontrolki, która nie jest obsługiwana, i dodania jej do listy proxy używanych przez aplikacje klienckie. Zawiera on następujące tematy:
- Co to jest serwer proxy?
- Co to jest fabryka serwerów proxy?
- mapowanie fabryki serwera proxy
- zarządzanie domyślnymi serwerami proxy
- Tematy pokrewne
Przykłady kodu pokazujące, jak implementować dostawców proxy, można znaleźć w sekcji How-To Tematy dla dostawców automatyzacji interfejsu użytkownika.
Co to jest serwer proxy?
Dostawca po stronie klienta lub serwer proxy to obiekt, który implementuje interfejs IRawElementProviderSimple w imieniu kontrolki, która nie ma własnej implementacji IRawElementProviderSimple. Bez serwera proxy taka kontrolka jest w dużej mierze nieprzezroczysta do automatyzacji interfejsu użytkownika, która może dostarczać tylko podstawowe informacje dostępne z uchwytu okna (HWND ), takich jak lokalizacja kontrolki.
Co to jest fabryka serwerów proxy?
Każdy serwer proxy wymaga odpowiedniego serwera proxy factory, który jest obiektem, który uwidacznia interfejs IUIAutomationProxyFactory. Automatyzacja interfejsu użytkownika obsługuje wewnętrzną tabelę wpisów fabryki serwera proxy , z których każda zawiera odwołanie do fabryki serwera proxy dla każdego serwera proxy oraz zestaw warunków. Gdy automatyzacja interfejsu użytkownika napotka kontrolkę, która nie ma natywnej implementacji IRawElementProviderSimple, wyszukuje wpis fabryki proxy, którego warunki wskazują, że obsługuje kontrolkę. Automatyzacja interfejsu użytkownika przeszukuje tabelę od początku, a gdy znajdzie pasujący wpis, automatyzacja interfejsu użytkownika wywołuje fabryki IUIAutomationProxyFactory::CreateProvider metody. Jeśli pasujący serwer proxy zostanie pomyślnie utworzony, automatyzacja interfejsu użytkownika przestanie przeszukiwać i używa nowo utworzonego obiektu serwera proxy; w przeciwnym razie automatyzacja interfejsu użytkownika kontynuuje wyszukiwanie.
Aplikacja kliencka tworzy wystąpienie wpisu fabryki proxy przy użyciu metody IUIAutomation::CreateProxyFactoryEntry, która zwraca wskaźnik interfejsu IUIAutomationProxyFactoryEntry. Klienci używają metod udostępnianych przez IUIAutomationProxyFactoryEntry w celu określenia zestawu warunków używanych przez fabrykę proxy do tworzenia serwera proxy.
Kiedy wywołuje IUIAutomationProxyFactory::CreateProvider, UI Automation przekazuje parametry, które obiekt fabryki proxy może użyć do określenia, czy proxy wystarczająco obsługuje kontrolkę niestandardową. Jeśli tak, fabryka proxy tworzy wystąpienie serwera proxy i zwraca wskaźnik interfejsu IRawElementProviderSimple; W przeciwnym razie zwraca wskaźnik NULL.
Mapowanie fabryki serwera proxy
Domyślnie Automatyzacja interfejsu użytkownika przeszukuje tabelę fabryk proxy w następującej kolejności.
Zamówienie | Proxy | Opis |
---|---|---|
1 | Microsoft: serwer proxy bez kontroli | W przypadku okien z dokładną nazwą klasy lub nazwą klasy bazowej "ComboBoxEx32". |
2 | Microsoft: serwer proxy bez kontroli | W przypadku okien z dokładną nazwą klasy lub nazwą klasy bazowej "WorkerW". |
3 | Microsoft: Serwer proxy bez kontroli | W przypadku okien z dokładną nazwą klasy lub nazwą klasy bazowej "SHELLDLL_DefView". |
4 | Microsoft: serwer proxy kontenera | W przypadku okien z dokładną nazwą klasy lub nazwą klasy bazowej "#32770". |
5 | Microsoft: serwer proxy kontenera | W przypadku okien z nazwą klasy lub nazwą klasy bazowej zawierającą "AfxControlBar". |
6 | Microsoft: TreeView Proxy | W przypadku okien o nazwie klasy lub nazwie klasy bazowej zawierającej ciąg "SysTreeView32". |
7 | Microsoft: ListView Proxy | W przypadku okien z nazwą klasy lub nazwą klasy bazowej zawierającą ciąg "SysListView32" (1). |
8 | Microsoft: ListView Proxy | W przypadku okien z nazwą klasy lub nazwą klasy bazowej zawierającą "SysListView32" (2). |
9 | Microsoft: MSAA Proxy | Dla dowolnego okna. |
Serwery proxy 7 i 8 to zduplikowane wpisy dla kontrolki SysListView32. Bez modyfikacji serwer proxy 7 jest zawsze używany dla kontrolki SysListView32, a serwer proxy 8 nigdy nie jest używany. Serwer proxy 8 jest używany tylko dla widocznych elementów listy i jest zwykle używany przez aplikacje klienckie, które działają tylko z widocznymi elementami lub które mają ścisłe wymagania dotyczące wydajności. Ci klienci mogą usunąć serwer proxy 7.
Proxy 9, serwer pośredniczący Microsoft Active Accessibility do automatyzacji interfejsu użytkownika, zawsze powinien być ostatnim wpisem w tabeli. Umożliwia to funkcjonalność rezerwową Microsoft Active Accessibility dla kontrolek, które implementują Microsoft Active Accessibility, ale nie Automatyzację Interfejsu Użytkownika.
Podczas modyfikowania wpisów w tabeli serwera proxy należy dokładnie ocenić nową pozycję wpisów. Zalecamy umieszczanie wpisów dla niestandardowych serwerów proxy po serwerach proxy związanych z kontrolą i kontenerami, ale przed serwerem proxy Microsoft Active Accessibility do automatyzacji interfejsu użytkownika. Ponadto, chociaż można umieścić kod w wywołaniu metody CreateProvider, aby ustalić, czy powinna obsługiwać dany uchwyt okna (HWND), bardziej wydajne jest pozwolenie, aby automatyzacja interfejsu użytkownika wybierała serwer proxy na podstawie nazwy klasy, a kod warunkowy w metodzie CreateProvider ograniczać do minimum.
Automatyzacja interfejsu użytkownika utrzymuje oddzielną tabelę fabryk proxy dla każdego klienta. Gdy klient zmieni tabelę serwera proxy, zmiany mają wpływ tylko na samego klienta; nie ma to wpływu na innych klientów.
Zarządzanie domyślnymi serwerami proxy
Gdy aplikacja kliencka tworzy obiekt CUIAutomation, tabela fabryki serwera proxy początkowo zawiera wpisy tylko dla domyślnych dostawców serwera proxy dla kontrolek standardowych. Za pomocą interfejsu IUIAutomationProxyFactoryMapping klienci mogą dodawać nowe wpisy, usuwać niechciane wpisy, zmieniać kolejność wpisów itd. Klient może pobrać wskaźnik interfejsu IUIAutomationProxyFactoryMapping, wywołując metodę IUIAutomation::ProxyFactoryMapping.
Tabela dostępnych serwerów proxy zawiera interfejs IUIAutomationProxyFactoryEntry dla każdego serwera proxy. Każdy IUIAutomationProxyFactoryEntry określa IUIAutomationProxyFactory i klasę sterowania, którą obsługuje serwer proxy, i definiuje sposób obsługi zdarzeń.
Tabela serwerów proxy jest reprezentowana przez interfejs IUIAutomationProxyFactoryMapping, który można uzyskać z właściwości IUIAutomation::ProxyFactoryMapping. Aplikacja może używać metod IUIAutomationProxyFactoryMapping w celu dodawania i usuwania serwerów proxy. Aby utworzyć nowy wpis do dodania do tej tabeli, użyj IUIAutomation::CreateProxyFactoryEntry w celu uzyskania interfejsu, a następnie użyj IUIAutomationProxyFactoryEntry metod w celu zdefiniowania odpowiedniej klasy kontrolki i zachowania serwera proxy.
Tematy pokrewne
-
Jak utworzyć dostawcę automatyzacji interfejsu użytkownika Client-Side (proxy)
-
Przewodnik programisty dostawcy automatyzacji interfejsu użytkownika