Menerapkan Penyedia Otomatisasi UI Client-Side (Proksi)
Microsoft UI Automation menyediakan serangkaian proksi untuk sebagian besar kontrol standar, seperti yang digunakan dalam aplikasi Microsoft Win32, Formulir Windows, dan Windows Presentation Foundation (WPF). Namun, banyak kontrol kustom dan kontrol pihak ketiga tidak menerapkan penyedia Automation UI 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:
- Apa itu Proksi?
- Apa itu Pabrik Proksi?
- Pemetaan Pabrik Proksi
- Mengelola Proksi Default
- Topik terkait
Untuk contoh kode yang menunjukkan cara menerapkan penyedia proksi, lihat Topik Cara Penggunaan untuk Penyedia Otomatisasi UI.
Apa itu Proksi?
Penyedia sisi klien, atau proksi, adalah objek yang mengimplementasikan antarmuka IRawElementProviderSimple atas nama kontrol yang tidak memiliki implementasi IRawElementProviderSimple sendiri. Tanpa proksi, kontrol seperti itu sebagian besar buram untuk Automasi UI, yang hanya dapat menyediakan informasi dasar yang tersedia dari handel jendela (HWND), seperti lokasi kontrol.
Apa itu Pabrik Proksi?
Setiap proksi memerlukan pabrik proksi yang sesuai, yang 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 Automation UI menemukan kontrol yang tidak memiliki implementasi IRawElementProviderSimple asli, ia mencari entri pabrik proksi yang kondisinya menunjukkan bahwa ia mendukung kontrol. Automasi UI mencari tabel dari awal, dan ketika menemukan entri yang cocok, Automation UI memanggil metode IUIAutomationProxyFactory::CreateProvider pabrik. Jika proksi yang cocok berhasil dibuat, Automasi 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 penunjuk antarmuka IUIAutomationProxyFactoryEntry . 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 penunjuk antarmuka IRawElementProviderSimple ; jika tidak, ia mengembalikan penunjuk NULL .
Pemetaan Pabrik Proksi
Secara default, Automation UI mencari melalui tabel pabrik proksi dalam urutan berikut.
Pesanan | Proksi | Deskripsi |
---|---|---|
1 | Microsoft: Proksi Non-Kontrol | Untuk jendela dengan nama kelas atau nama kelas dasar yang tepat "ComboBoxEx32". |
2 | Microsoft: Proksi Non-Kontrol | Untuk jendela dengan nama kelas yang tepat atau nama kelas dasar "WorkerW". |
3 | Microsoft: Proksi Non-Kontrol | Untuk jendela dengan nama kelas atau nama kelas dasar yang tepat "SHELLDLL_DefView". |
4 | Microsoft: Proksi Kontainer | Untuk jendela dengan nama kelas atau nama kelas dasar yang tepat "#32770". |
5 | Microsoft: Proksi Kontainer | Untuk jendela dengan nama kelas atau nama kelas dasar yang berisi "AfxControlBar". |
6 | Microsoft: TreeView Proxy | Untuk jendela dengan nama kelas atau nama kelas dasar yang berisi "SysTreeView32". |
7 | Microsoft: ListView Proxy | Untuk jendela dengan nama kelas atau nama kelas dasar yang berisi "SysListView32" (1). |
8 | Microsoft: ListView Proxy | Untuk jendela dengan nama kelas atau nama kelas dasar yang berisi "SysListView32" (2). |
9 | Microsoft: Proksi MSAA | Untuk jendela manapun. |
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, proksi Microsoft Active Accessibility to UI Automation, harus selalu menjadi entri terakhir dalam tabel. Ini memungkinkan fungsionalitas fallback Aksesibilitas Aktif Microsoft untuk kontrol yang mengimplementasikan Aksesibilitas Aktif Microsoft, tetapi bukan Automasi UI.
Saat memodifikasi entri dalam tabel pabrik proksi, Anda harus mengevaluasi posisi baru entri 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 ke CreateProvider menentukan apakah harus mendukung handel jendela tertentu (HWND), lebih efisien untuk membiarkan Automasi UI memilih proksi berdasarkan nama kelas, dan menjaga kode bersyarah dalam metode CreateProvider minimal.
Automasi UI mempertahankan tabel pabrik proksi terpisah untuk setiap klien. Ketika klien mengubah tabel proksinya, perubahan hanya memengaruhi klien itu sendiri; klien lain tidak terpengaruh.
Mengelola Proksi Default
Ketika aplikasi klien membuat objek CUIAutomation , tabel pabrik proksi awalnya berisi entri hanya untuk penyedia proksi default untuk kontrol standar. Dengan menggunakan antarmuka IUIAutomationProxyFactoryMapping , 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::P roxyFactoryMapping .
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::P roxyFactoryMapping . 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.
Topik terkait