Bagikan melalui


Menerapkan Penyedia Automasi UI Client-Side (Proksi)

Microsoft UI Automation menyediakan serangkaian proksi untuk sebagian besar kontrol standar, seperti yang digunakan dalam aplikasi Microsoft Win32, Windows Forms, dan Windows Presentation Foundation (WPF). Namun, banyak kontrol kustom dan kontrol pihak ketiga tidak menerapkan penyedia UI Automation asli. Agar dapat diakses oleh aplikasi klien Automation UI, kontrol ini harus dilengkapi dengan penyedia sisi klien, juga dikenal sebagai penyedia proksi , atau proksi .

Topik ini menjelaskan cara menulis penyedia proksi untuk kontrol yang tidak didukung dan menambahkannya ke daftar proksi yang digunakan oleh aplikasi klien. Ini termasuk topik-topik berikut:

Untuk contoh kode yang menunjukkan cara menerapkan penyedia proksi, lihat topik How-To untuk Penyedia Automasi UI.

Apa itu Proksi?

Penyedia sisi klien, atau proksi, adalah objek yang mengimplementasikan antarmukaIRawElementProviderSimple atas nama kontrol yang tidak memiliki implementasi IRawElementProviderSimple sendiri. Tanpa proksi, kontrol seperti itu sebagian besar kurang terlihat oleh UI Automation, yang hanya dapat menyediakan informasi dasar yang tersedia dari pegangan jendela (HWND), seperti lokasi kontrol.

Apa itu Pabrik Proksi?

Setiap proksi memerlukan pabrik proksi yang sesuai, dan merupakan objek yang mengekspos antarmuka IUIAutomationProxyFactory. Automasi UI mempertahankan tabel internal entri pabrik proksi , yang masing-masing berisi referensi ke pabrik proksi untuk setiap proksi, dan serangkaian kondisi. Ketika Automasi UI menemukan kontrol yang tidak memiliki implementasi asli dari IRawElementProviderSimple, ia mencari entri dari pabrik proksi yang kondisinya menunjukkan bahwa entri tersebut mendukung kontrol tersebut. Automasi UI mencari tabel dari awal, dan ketika menemukan entri yang cocok, Automasi UI memanggil metode pabrik IUIAutomationProxyFactory::CreateProvider. Jika proksi yang cocok berhasil dibuat, Otomatisasi UI berhenti mencari dan menggunakan objek proksi yang baru dibuat; jika tidak, Automation UI melanjutkan pencarian.

Aplikasi klien membuat instans entri pabrik proksi dengan menggunakan metode IUIAutomation::CreateProxyFactoryEntry, yang mengembalikan IUIAutomationProxyFactoryEntry penunjuk antarmuka. Klien menggunakan metode yang diekspos oleh IUIAutomationProxyFactoryEntry untuk menentukan serangkaian kondisi yang digunakan pabrik proksi untuk membuat proksi.

Ketika memanggil IUIAutomationProxyFactory::CreateProvider, Automation UI meneruskan parameter yang dapat digunakan objek pabrik proksi untuk menentukan apakah proksi cukup mendukung kontrol kustom. Jika demikian, pabrik proksi membuat instans proksi dan mengembalikan antarmuka penunjuk IRawElementProviderSimple; jika tidak, akan mengembalikan penunjuk NULL.

Pemetaan Fabrikasi Proksi

Secara bawaan, UI Automation mencari melalui tabel pabrik proksi dalam urutan berikut.

Pesanan Proxy Deskripsi
1 Microsoft: Proksi Tanpa Kontrol Untuk windows dengan nama kelas yang tepat atau nama kelas dasar "ComboBoxEx32".
2 Microsoft: Proksi Tanpa Kontrol Untuk jendela dengan nama kelas yang tepat atau nama kelas dasar "WorkerW".
3 Microsoft: Proksi Tanpa Kontrol Untuk jendela dengan nama kelas yang tepat atau nama kelas dasar "SHELLDLL_DefView".
4 Microsoft: Proxy Kontainer Untuk jendela dengan nama kelas yang tepat atau nama kelas dasar "#32770".
5 Microsoft: Proksi Kontainer Untuk jendela dengan nama kelas atau nama kelas dasar yang berisi "AfxControlBar".
6 Microsoft: Proxy TreeView Untuk windows dengan nama kelas atau nama kelas dasar yang berisi "SysTreeView32".
7 Microsoft: ListView Proxy Untuk windows dengan nama kelas atau nama kelas dasar yang berisi "SysListView32" (1).
8 Microsoft: ListView Proxy Untuk windows dengan nama kelas atau nama kelas dasar yang berisi "SysListView32" (2).
9 Microsoft: Proksi MSAA Untuk jendela apa pun.

 

Proksi 7 dan 8 adalah entri duplikat untuk kontrol SysListView32. Tanpa modifikasi, proksi 7 selalu digunakan untuk kontrol SysListView32, dan proksi 8 tidak pernah digunakan. Proksi 8 hanya digunakan untuk item daftar yang terlihat, dan biasanya digunakan oleh aplikasi klien yang hanya berfungsi dengan elemen yang terlihat, atau yang memiliki persyaratan performa yang ketat. Klien ini dapat menghapus proksi 7.

Proksi 9, yaitu proksi Microsoft Active Accessibility ke UI Automation, harus selalu menjadi masukan terakhir dalam tabel. Ini memungkinkan fungsionalitas fallback Microsoft Active Accessibility untuk kontrol yang mengimplementasikan Microsoft Active Accessibility, tetapi bukan Automation UI.

Saat memodifikasi entri dalam tabel pabrik proksi, Anda harus mengevaluasi posisi entri baru dengan hati-hati. Kami menyarankan agar entri untuk proksi kustom ditempatkan setelah proksi non-kontrol dan kontainer, tetapi sebelum proksi Microsoft Active Accessibility to UI Automation. Selain itu, meskipun dimungkinkan untuk memiliki kode dalam panggilan keCreateProvideruntuk menentukan apakah itu harus mendukung handle jendela tertentu (HWND), lebih efisien membiarkan Automasi UI memilih proksi berdasarkan nama kelas dan menjaga kode bersyarat dalam metode CreateProvider seminimal mungkin.

Automasi UI mempertahankan tabel fabrik proxy terpisah untuk setiap klien. Ketika klien mengubah tabel proksinya, perubahan hanya memengaruhi klien itu sendiri; klien lain tidak terpengaruh.

Mengelola Proksi Default

Saat aplikasi klien membuat objek CUIAutomation, tabel pabrik proxy pada awalnya hanya berisi entri untuk penyedia proxy default untuk kontrol standar. Dengan menggunakan antarmukaIUIAutomationProxyFactoryMapping, klien dapat menambahkan entri baru, menghapus entri yang tidak diinginkan, mengubah urutan entri, dan sebagainya. Klien dapat mengambil penunjuk antarmuka IUIAutomationProxyFactoryMapping dengan memanggil metode IUIAutomation::ProxyFactoryMapping.

Tabel proksi yang tersedia berisi antarmuka IUIAutomationProxyFactoryEntry untuk setiap proksi. Setiap IUIAutomationProxyFactoryEntry menentukan IUIAutomationProxyFactory dan kelas kontrol yang dilayani proksi, dan menentukan bagaimana peristiwa akan ditangani.

Tabel proksi diwakili oleh antarmuka IUIAutomationProxyFactoryMapping, yang dapat diperoleh dari properti IUIAutomation::ProxyFactoryMapping. Aplikasi dapat menggunakan metode IUIAutomationProxyFactoryMapping untuk menambahkan dan menghapus proksi. Untuk membuat entri baru untuk ditambahkan ke tabel ini, gunakan IUIAutomation::CreateProxyFactoryEntry untuk mendapatkan antarmuka, lalu gunakan metode IUIAutomationProxyFactoryEntry untuk menentukan kelas kontrol yang berlaku dan perilaku proksi.

Cara Membuat Client-Side Penyedia Automasi (Proksi) UI

Panduan Programmer Penyedia Automasi UI