Client-Side (Ara Sunucu) UI Otomasyon Sağlayıcısını Uygulamak
Microsoft UI Otomasyonu, Microsoft Win32, Windows Forms ve Windows Presentation Foundation (WPF) uygulamalarında kullanılanlar gibi çoğu standart denetim için bir proxy kümesi sağlar. Ancak, birçok özel denetimler ve üçüncü taraf denetimler doğal Kullanıcı Arayüzü Otomasyonu sağlayıcılarını uygulamaz. UI Otomasyonu istemci uygulamalarının erişilebilir olması için, bu denetimlerin ara sunucu sağlayıcıları veya proxy'leri olarak da bilinen istemci tarafı sağlayıcılarıyla donatılması gerekir.
Bu konuda, desteklenmeyen bir denetim için bir proxy sağlayıcısının nasıl yazıldığı ve istemci uygulamaları tarafından kullanılan proxy'ler listesine nasıl ekleneceği açıklanmaktadır. Aşağıdaki konuları içerir:
- Proxy nedir?
- Proxy Factory nedir?
- Proxy Fabrika Eşleme
- Varsayılan Proxy'leri yönetme
- İlgili konular
Ara sunucu sağlayıcılarının nasıl uygulandığını gösteren kod örnekleri için bkz. How-To UI Otomasyonu Sağlayıcıları için Konular.
Proxy nedir?
İstemci tarafı sağlayıcı veya ara sunucu, IRawElementProviderSimple kendi uygulaması olmayan bir denetim adına IRawElementProviderSimple arabirimini uygulayan bir nesnedir. Ara sunucu olmadan, böyle bir denetim, UI Otomasyonu için büyük ölçüde anlaşılması zordur. Bu sistem, yalnızca pencere tutamacından (HWND) sağlanan denetim konumu gibi temel bilgileri sunabilir.
Proxy Factory nedir?
Her ara sunucu, IUIAutomationProxyFactory arabirimini kullanıma sunan bir nesne olan ilgili proxy fabrikasıgerektirir. UI Otomasyonu, her biri her proxy için proxy fabrikasına bir referans ve bir dizi koşul içeren proxy fabrikası girdilerinin iç tablosunu tutar. UI Otomasyonu, yerel IRawElementProviderSimple uygulaması olmayan bir denetimle karşılaştığında, koşulları bu denetimi desteklediğini gösteren bir proxy fabrikası girişi arar. UI Otomasyonu tabloda baştan arar ve eşleşen bir girdi bulduğunda UI Otomasyonu fabrikanın IUIAutomationProxyFactory::CreateProvider yöntemini çağırır. Eşleşen ara sunucu başarıyla oluşturulursa, UI Otomasyonu aramayı durdurur ve yeni oluşturulan proxy nesnesini kullanır; aksi takdirde UI Otomasyonu aramaya devam eder.
İstemci uygulaması, IUIAutomation::CreateProxyFactoryEntry yöntemini kullanarak ara sunucu fabrika girişinin bir örneğini oluşturur ve bu yöntem bir IUIAutomationProxyFactoryEntry arabirim işaretçisi döndürür. İstemciler IUIAutomationProxyFactoryEntry tarafından kullanıma sunulan yöntemleri kullanarak ara sunucu fabrikasının ara sunucuyu oluşturmak için kullandığı koşullar kümesini belirtir.
IUIAutomationProxyFactory::CreateProviderçağırdığında, UI Automation, ara sunucu fabrika nesnesinin, özel denetimi yeterince destekleyip desteklemediğini belirlemek için kullanabileceği parametreleri geçirir. Bu durumda, proxy fabrikası ara sunucu örneğini oluşturur ve IRawElementProviderSimple arabirim işaretçisini döndürür; aksi takdirde, bir NULL işaretçisi döndürür.
Proxy Factory Eşlemesi
Varsayılan olarak, UI Otomasyonu ara sunucu fabrikası tablosunda aşağıdaki sırayla arama yapar.
Sipariş | Proxy | Açıklama |
---|---|---|
1 | Microsoft: Denetimsiz Ara Sunucu | Tam sınıf adı veya temel sınıf adı "ComboBoxEx32" olan pencereler için. |
2 | Microsoft: Denetimsiz Ara Sunucu | Tam sınıf adı veya temel sınıf adı "WorkerW" olan pencereler için. |
3 | Microsoft: Denetimsiz Ara Sunucu | Tam sınıf adı veya temel sınıf adı "SHELLDLL_DefView" olan pencereler için. |
4 | Microsoft: Kapsayıcı Ara Sunucusu | Tam sınıf adı veya temel sınıf adı "#32770" olan pencereler için. |
5 | Microsoft: Kapsayıcı Ara Sunucusu | "AfxControlBar" içeren bir sınıf adına veya temel sınıf adına sahip pencereler için. |
6 | Microsoft: TreeView Proxy | "SysTreeView32" içeren bir sınıf adına veya temel sınıf adına sahip pencereler için. |
7 | Microsoft: ListView Proxy | "SysListView32" (1) içeren bir sınıf adı veya temel sınıf adına sahip pencereler için. |
8 | Microsoft: ListView Proxy | "SysListView32" (2) içeren sınıf adı veya temel sınıf adına sahip pencereler için. |
9 | Microsoft: MSAA Proxy | Herhangi bir pencere için. |
Proxy'ler 7 ve 8, SysListView32 denetimi için yinelenen girdilerdir. Değişiklik yapılmadan, proxy 7 her zaman SysListView32 denetimi için kullanılır ve proxy 8 hiçbir zaman kullanılmaz. Proxy 8 yalnızca görünür liste öğeleri için kullanılır ve genellikle yalnızca görünür öğelerle çalışan veya katı performans gereksinimleri olan istemci uygulamaları tarafından kullanılır. Bu istemciler proxy 7'yi kaldırabilir.
Microsoft Active Accessibility to UI Automation proxy'si olan Proxy 9, her zaman tablodaki son girdi olmalıdır. Bu, Microsoft Etkin Erişilebilirlik'i uygulayan denetimler için Microsoft Active Accessibility geri dönüş işlevselliğini etkinleştirir, ancak UI Otomasyonu'u etkinleştirmez.
Proxy factory tablosundaki girdileri değiştirirken, girdilerin yeni konumunu dikkatle değerlendirmeniz gerekir. Özel proxy'ler için girdilerin, kontrolsüz ve kapsayıcı proxy'lerden sonra, ancak Microsoft Active Accessibility to UI Automation proxy'sinden önce yerleştirilmesini öneririz. Ayrıca, CreateProvider çağrısında, belirli bir pencere tutamacını (HWND) desteklemesi gerekip gerekmediğini belirlemek için kod bulunması mümkün olsa da, UI Otomasyonu'nun sınıf adına göre bir proxy seçmesine izin vermek ve CreateProvider yönteminde koşullu kodu en düşük düzeyde tutmak daha verimlidir.
UI Otomasyonu, her istemci için ayrı bir proxy fabrika tablosu tutar. İstemci proxy tablosunu değiştirdiğinde, değişiklikler yalnızca istemcinin kendisini etkiler; diğer istemciler etkilenmez.
Varsayılan Proxy'leri Yönetme
İstemci uygulaması CUIAutomation nesnesini oluşturduğunda, ara sunucu fabrika tablosu başlangıçta yalnızca standart denetimler için varsayılan ara sunucu sağlayıcılarına yönelik girdiler içerir. İstemciler, IUIAutomationProxyFactoryMapping arabirimini kullanarak yeni girdiler ekleyebilir, istenmeyen girişleri kaldırabilir, girdilerin sırasını değiştirebilir vb. İstemci, IUIAutomation::ProxyFactoryMapping yöntemini çağırarak bir IUIAutomationProxyFactoryMapping arabirim işaretçisini alabilir.
Mevcut proxy'lerin tablosu, her bir proxy için bir IUIAutomationProxyFactoryEntry arabirimini içerir. Her IUIAutomationProxyFactoryEntryIUIAutomationProxyFactory ve ara sunucunun hizmet yaptığı denetim sınıfını belirtir ve olayların nasıl işleneceğini tanımlar.
Proxy tablosu, IUIAutomation::ProxyFactoryMapping özelliğinden elde edilebilen IUIAutomationProxyFactoryMapping arabirimi tarafından temsil edilir. Bir uygulama proxy'leri eklemek ve silmek için IUIAutomationProxyFactoryMapping yöntemlerini kullanabilir. Bu tabloya eklenecek yeni bir giriş oluşturmak için, arabirimi elde etmek için IUIAutomation::CreateProxyFactoryEntry kullanın ve ardından geçerli denetim sınıfını ve ara sunucu davranışını tanımlamak için IUIAutomationProxyFactoryEntry yöntemlerini kullanın.
İlgili konular