Bagikan melalui


Automasi UI dan Aksesibilitas Aktif

Microsoft Active Accessibility adalah API warisan yang diperkenalkan di Windows 95, dan dirancang untuk membuat aplikasi Windows dapat diakses. Microsoft UI Automation adalah model aksesibilitas baru untuk Windows dan dimaksudkan untuk memenuhi kebutuhan produk teknologi bantuan dan alat pengujian otomatis. Automasi UI menawarkan banyak peningkatan atas Aksesibilitas Aktif Microsoft. Topik ini menjelaskan perbedaan antara kedua teknologi tersebut.

Topik ini berisi bagian berikut.

Bahasa Pemrograman

Microsoft Active Accessibility didasarkan pada Model Objek Komponen (COM) dengan dukungan untuk antarmuka ganda, dan oleh karena itu, dapat diprogram dalam bahasa C/C++ dan pembuatan skrip.

Ketika Automasi UI diperkenalkan, API klien terbatas pada kode terkelola, sementara API penyedia menyertakan implementasi terkelola dan tidak terkelola. Dengan Windows 7, API klien berbasis COM baru diperkenalkan untuk mempermudah program aplikasi klien Automation UI di C/C++.

Server dan Klien

Di Microsoft Active Accessibility, server dan klien berkomunikasi secara langsung, sebagian besar melalui implementasi server antarmuka IAccessible.

Di Automasi UI, layanan inti terletak antara server (penyedia) dan klien. Layanan inti melakukan panggilan ke antarmuka yang diterapkan oleh penyedia dan menyediakan layanan tambahan, seperti menghasilkan pengidentifikasi run-time unik untuk elemen UI. Aplikasi klien mendapatkan akses ke layanan inti ini dengan membuat objek CUIAutomation. Objek ini mendukung serangkaian antarmuka klien yang terpisah dari antarmuka penyedia. Untuk informasi selengkapnya, lihat Membuat Objek CUIAutomation.

Penyedia Automation UI dapat memberikan informasi kepada klien Microsoft Active Accessibility, dan server Microsoft Active Accessibility dapat memberikan informasi ke aplikasi klien Automation UI. Namun, karena Microsoft Active Accessibility tidak mengekspos informasi sebanyak Automasi UI, kedua model tidak sepenuhnya kompatibel.

Elemen UI

Microsoft Active Accessibility menyajikan elemen UI sebagai antarmuka IAccessible yang dipasangkan dengan pengidentifikasi anak. Sulit untuk membandingkan dua pointer IAccessible untuk menentukan apakah mereka merujuk ke elemen yang sama.

Dalam Automasi UI, setiap elemen direpresentasikan sebagai objek yang mengekspos antarmuka IUIAutomationElement kepada klien. Elemen dapat dibandingkan dengan pengidentifikasi run-time mereka, yang diambil dengan menggunakan IUIAutomationElement::GetRuntimeId.

Tampilan dan Navigasi Pohon

Elemen UI pada layar dapat dilihat sebagai struktur pohon dengan desktop sebagai akar, jendela aplikasi sebagai turunan langsung, dan elemen dalam aplikasi sebagai turunan lebih lanjut.

Dalam Microsoft Active Accessibility, banyak elemen UI yang tidak relevan dengan pengguna akhir yang terekspos dalam struktur pohon. Aplikasi klien harus memeriksa semua elemen di pohon untuk menentukan elemen mana yang bermakna.

Aplikasi klien UI Automation melihat UI melalui tampilan yang difilter. Tampilan hanya berisi elemen yang memberikan informasi kepada pengguna atau yang dapat berinteraksi dengan pengguna. Tampilan yang telah ditentukan sebelumnya yang hanya menyertakan elemen kontrol dan hanya elemen konten yang tersedia, dan aplikasi klien dapat menentukan tampilan kustom. Automasi UI memudahkan untuk menggambarkan UI kepada pengguna, dan untuk membantu pengguna berinteraksi dengan aplikasi.

Di Microsoft Active Accessibility, navigasi antar elemen bersifat spasial, misalnya, berpindah ke elemen yang terletak di sebelah kiri layar, logis, misalnya, berpindah ke item menu berikutnya atau item berikutnya dalam urutan tab dalam kotak dialog, atau hierarkis, misalnya, pindah ke elemen turunan pertama dalam kontainer atau dari elemen turunan ke elemen induknya. Navigasi hierarkis rumit oleh fakta bahwa elemen anak tidak selalu merupakan objek yang mengimplementasikan IAccessible.

Dalam Automasi UI, semua elemen UI adalah objek COM yang mengekspos antarmuka IUIAutomationElement dan mendukung fungsionalitas dasar yang sama. Dari sudut depan penyedia, objek COM mengimplementasikan antarmuka yang diwarisi dari IRawElementProviderSimple. Navigasi terutama hierarkis; yaitu, dari orang tua ke anak-anak, dan dari satu saudara kandung ke saudara berikutnya. Namun, navigasi antar saudara memiliki elemen logis, karena dapat mengikuti urutan tab. Klien dapat menavigasi dari titik awal mana pun, menggunakan tampilan pohon yang difilter, dengan menggunakan IUIAutomationTreeWalker. Klien juga dapat menavigasi ke turunan atau turunan tertentu dengan menggunakan IUIAutomationElement::FindFirst dan IUIAutomationElement::FindAll. Misalnya, mudah untuk mengambil semua elemen dalam kotak dialog yang mendukung pola kontrol tertentu.

Navigasi di Automasi UI lebih konsisten daripada di Microsoft Active Accessibility. Beberapa elemen, seperti daftar drop-down dan jendela pop-up, muncul dua kali di pohon Aksesibilitas Aktif Microsoft, dan navigasi dari elemen-elemen tersebut mungkin memiliki hasil yang tidak terduga. Sulit untuk menerapkan Microsoft Active Accessibility dengan benar untuk kontrol rebar. Automasi UI memungkinkan reparenting dan reposisi, sehingga elemen dapat ditempatkan di mana saja di pohon, meskipun hierarki diberlakukan oleh kepemilikan jendela.

Peran dan Jenis Kontrol

Microsoft Active Accessibility menggunakan properti accRole (IAccessible::get_accRole) untuk mengambil deskripsi peran elemen di UI, seperti ROLE_SYSTEM_SLIDER atau ROLE_SYSTEM_MENUITEM. Peran elemen adalah petunjuk utama untuk fungsionalitas yang tersedia. Interaksi dengan kontrol dicapai dengan menggunakan metode tetap seperti IAccessible::accSelect dan IAccessible::accDoDefaultAction. Interaksi antara aplikasi klien dan UI terbatas pada apa yang dapat dilakukan melalui IAccessible.

Sebaliknya, Automasi UI memisahkan jenis kontrol elemen, yang dijelaskan oleh properti IUIAutomationElement::CurrentControlType (atau IUIAutomationElement::CachedControlType), dari fungsionalitas yang diharapkan. Fungsionalitas ditentukan oleh pola kontrol yang didukung oleh penyedia melalui implementasi antarmuka khususnya. Pola kontrol dapat dikombinasikan untuk menjelaskan serangkaian fungsionalitas lengkap yang didukung oleh elemen UI tertentu. Beberapa penyedia diperlukan untuk mendukung pola kontrol tertentu. Misalnya, penyedia untuk kotak centang harus mendukung pola Kontrol pengalih. Penyedia lain diperlukan untuk mendukung satu atau beberapa set pola kontrol. Misalnya, tombol harus mendukung Tombol atau pola kontrol Panggil . Masih yang lain tidak mendukung pola kontrol. Misalnya, panel yang tidak dapat dipindahkan, diubah ukurannya, atau ditampung tidak memiliki pola kontrol.

Automasi UI mendukung kontrol kustom, yang diidentifikasi oleh konstanta UIA_CustomControlTypeId dan dapat dijelaskan oleh properti IUIAutomationElement::CurrentLocalizedControlType (atau IUIAutomationElement::CachedLocalizedControlType).

Tabel berikut memetakan peran objek Aksesibilitas Aktif Microsoft ke jenis kontrol Automation UI.

Peran Aksesibilitas Aktif Jenis Kontrol UI Automation
ROLE_SYSTEM_PUSHBUTTON Kancing
ROLE_SYSTEM_CLIENT Kalender
ROLE_SYSTEM_CHECKBUTTON KotakCentang
ROLE_SYSTEM_COMBOBOX ComboBox
ROLE_SYSTEM_CLIENT Lihat Jenis Kontrol Kustom.
ROLE_SYSTEM_LIST DataGrid
ROLE_SYSTEM_LISTITEM DataItem
ROLE_SYSTEM_DOCUMENT Surat
ROLE_SYSTEM_TEXT Mengedit
ROLE_SYSTEM_GROUPING Grup
ROLE_SYSTEM_LIST Header
ROLE_SYSTEM_COLUMNHEADER HeaderItem
ROLE_SYSTEM_LINK Hyperlink
ROLE_SYSTEM_GRAPHIC Gambar
ROLE_SYSTEM_LIST Daftar
ROLE_SYSTEM_LISTITEM ListItem
ROLE_SYSTEM_MENUPOPUP Menu
ROLE_SYSTEM_MENUBAR Bilah Menu
ROLE_SYSTEM_MENUITEM MenuItem
ROLE_SYSTEM_PANE Panel
ROLE_SYSTEM_PROGRESSBAR Bilah Kemajuan
ROLE_SYSTEM_RADIOBUTTON RadioButton
ROLE_SYSTEM_SCROLLBAR Bilah Gulir
ROLE_SYSTEM_SEPARATOR Pemisah
ROLE_SYSTEM_SLIDER Slider
ROLE_SYSTEM_SPINBUTTON Spinner
ROLE_SYSTEM_SPLITBUTTON SplitButton
ROLE_SYSTEM_STATUSBAR Bilah Status
ROLE_SYSTEM_PAGETABLIST Tab
ROLE_SYSTEM_PAGETAB TabItem
ROLE_SYSTEM_TABLE Table
ROLE_SYSTEM_STATICTEXT Teks
ROLE_SYSTEM_INDICATOR Jempol
ROLE_SYSTEM_TITLEBAR Bilah Judul
ROLE_SYSTEM_TOOLBAR Bilah Alat
ROLE_SYSTEM_TOOLTIP TipsAlat
ROLE_SYSTEM_OUTLINE Pohon
ROLE_SYSTEM_OUTLINEITEM TreeItem
ROLE_SYSTEM_WINDOW Jendela

 

Item dan Properti

Elemen Aksesibilitas Aktif Microsoft mendukung serangkaian properti umum. Beberapa properti, seperti accState, harus menjelaskan kondisi yang berbeda, tergantung pada peran elemen. Server harus menerapkan semua metode IAccessible yang mengembalikan properti, bahkan properti yang tidak relevan dengan elemen .

Automasi UI mendefinisikan properti tambahan, beberapa di antaranya sesuai dengan status di Microsoft Active Accessibility. Beberapa properti umum untuk semua elemen, tetapi properti lain khusus untuk mengontrol jenis dan pola kontrol. Penyedia Automasi UI tidak harus menerapkan properti yang tidak relevan, tetapi dapat mengembalikan nilai null untuk properti apa pun yang tidak didukungnya. Layanan inti Automation UI dapat memperoleh beberapa properti dari penyedia jendela default, dan ini digambarkan dengan properti yang diimplementasikan secara eksplisit oleh penyedia.

Selain mendukung lebih banyak properti, Automation UI memungkinkan performa yang lebih baik dengan memungkinkan properti di-cache.

Tabel berikut menunjukkan korespondensi antara beberapa properti dalam dua model. Untuk deskripsi ID properti Automation UI, lihat Pengidentifikasi Properti Elemen Automation.

Aksesor properti Aksesibilitas Aktif Properti ID UI Automation Keterangan
get_accKeyboardShortcut UIA_AccessKeyPropertyId atau UIA_AcceleratorKeyPropertyId UIA_AccessKeyPropertyId diutamakan jika keduanya ada.
get_accName UIA_NamePropertyId
get_accRole UIA_ControlTypePropertyId Lihat tabel sebelumnya untuk memetakan peran untuk mengontrol jenis.
get_accValue UIA_ValueValuePropertyId atau UIA_RangeValueValuePropertyId Hanya berlaku untuk jenis kontrol yang mendukung IUIAutomationValuePattern atau IUIAutomationRangeValuePattern. Nilai rentang dinormalisasi menjadi 0-100, agar konsisten dengan perilaku Aksesibilitas Aktif Microsoft. Nilai direpresentasikan sebagai string.
get_accHelp UIA_HelpTextPropertyId
accLocation UIA_BoundingRectanglePropertyId
get_accDescription Tidak didukung. accDescription tidak memiliki spesifikasi yang jelas dalam Microsoft Active Accessibility, yang mengakibatkan server menempatkan berbagai informasi dalam properti ini.
get_accHelpTopic Tidak didukung.

 

Tabel berikut ini memperlihatkan ID properti Automation UI yang sesuai dengan konstanta status objek Aksesibilitas Aktif Microsoft.

Status Aksesibilitas Aktif Properti UI Automation Memicu perubahan status WinEvent?
STATE_SYSTEM_CHECKED UIA_ToggleToggleStatePropertyId untuk kotak centang. UIA_SelectionItemIsSelectedPropertyId untuk tombol radio. Y
STATE_SYSTEM_COLLAPSED UIA_ExpandCollapseExpandCollapseStatePropertyId (nilai = ExpandCollapseState_Collapsed). Y
STATE_SYSTEM_EXPANDED UIA_ExpandCollapseExpandCollapseStatePropertyId (nilai = ExpandCollapseState_Expanded atau ExpandCollapseState_PartiallyExpanded). Y
STATE_SYSTEM_FOCUSABLE UIA_IsKeyboardFocusablePropertyId. N
STATE_SYSTEM_FOCUSED UIA_HasKeyboardFocusPropertyId. N
STATE_SYSTEM_HASPOPUP UIA_ExpandCollapseExpandCollapseStatePropertyId untuk item menu. N
STATE_SYSTEM_INVISIBLE UIA_IsOffscreenPropertyId (nilai = True dan IUIAutomationElement::GetClickablePoint gagal). N
STATE_SYSTEM_LINKED UIA_ControlTypePropertyId (nilai = UIA_HyperlinkControlTypeId). N
STATE_SYSTEM_MIXED UIA_ToggleToggleStatePropertyId (nilai = ToggleState_Indeterminate. N
STATE_SYSTEM_MOVEABLE UIA_TransformCanMovePropertyId. N
STATE_SYSTEM_MULTISELECTABLE UIA_SelectionCanSelectMultiplePropertyId. N
STATE_SYSTEM_OFFSCREEN UIA_IsOffscreenPropertyId. N
STATE_SYSTEM_PROTECTED UIA_IsPasswordPropertyId. N
STATE_SYSTEM_READONLY UIA_RangeValueIsReadOnlyPropertyId dan UIA_ValueIsReadOnlyPropertyId. N
STATE_SYSTEM_SELECTABLE UIA_IsSelectionItemPatternAvailablePropertyId . N
STATE_SYSTEM_SELECTED UIA_SelectionItemIsSelectedPropertyId. N
STATE_SYSTEM_SIZEABLE UIA_TransformCanResizePropertyId. N
STATE_SYSTEM_UNAVAILABLE UIA_IsEnabledPropertyId. Y

 

Untuk daftar lengkap ID properti, lihat Pengidentifikasi Properti.

Acara

Tidak seperti Microsoft Active Accessibility, mekanisme peristiwa di Automation UI, tidak bergantung pada perutean peristiwa Windows, yang terkait erat dengan handel jendela, dan tidak mengharuskan aplikasi klien untuk menyiapkan kait. Langganan peristiwa dapat disempurnakan ke bagian pohon tertentu, bukan hanya untuk peristiwa tertentu. Penyedia juga dapat menyempurnakan acara penambahan dengan melacak peristiwa mana yang sedang didengarkan.

Klien juga lebih mudah untuk mengambil elemen yang meningkatkan peristiwa karena ini diteruskan langsung ke panggilan balik peristiwa. Properti elemen diambil sebelumnya secara otomatis, jika permintaan cache disediakan saat klien berlangganan peristiwa.

Tabel berikut ini memperlihatkan korespondensi konstanta peristiwa Aksesibilitas Aktif Microsoft dan ID peristiwa Automation UI.

WinEvent ID Peristiwa Automasi UI
EVENT_OBJECT_ACCELERATORCHANGE UIA_AcceleratorKeyPropertyId perubahan properti.
EVENT_OBJECT_CONTENTSCROLLED UIA_ScrollVerticalScrollPercentPropertyId atau UIA_ScrollHorizontalScrollPercentPropertyId perubahan properti pada bilah gulir terkait.
EVENT_OBJECT_CREATE UIA_StructureChangedEventId.
EVENT_OBJECT_DEFACTIONCHANGE Tidak ada yang setara.
EVENT_OBJECT_DESCRIPTIONCHANGE Tidak ada yang sama persis; mungkin perubahan properti UIA_HelpTextPropertyId atau UIA_LocalizedControlTypePropertyId.
EVENT_OBJECT_DESTROY UIA_StructureChangedEventId.
EVENT_OBJECT_FOCUS UIA_AutomationFocusChangedEventId.
EVENT_OBJECT_HELPCHANGE UIA_HelpTextPropertyId berubah.
EVENT_OBJECT_HIDE UIA_StructureChangedEventId.
EVENT_OBJECT_LOCATIONCHANGE UIA_BoundingRectanglePropertyId perubahan properti.
EVENT_OBJECT_NAMECHANGE UIA_NamePropertyId perubahan properti.
EVENT_OBJECT_PARENTCHANGE UIA_StructureChangedEventId.
EVENT_OBJECT_REORDER Tidak secara konsisten digunakan dalam Microsoft Active Accessibility. Tidak ada peristiwa yang sesuai secara langsung yang didefinisikan dalam UI Automation.
EVENT_OBJECT_SELECTION UIA_SelectionItem_ElementSelectedEventId.
EVENT_OBJECT_SELECTIONADD UIA_SelectionItem_ElementAddedToSelectionEventId.
EVENT_OBJECT_SELECTIONREMOVE UIA_SelectionItem_ElementRemovedFromSelectionEventId.
EVENT_OBJECT_SELECTIONWITHIN Tidak ada yang setara.
EVENT_OBJECT_SHOW UIA_StructureChangedEventId.
EVENT_OBJECT_STATECHANGE Berbagai peristiwa yang diubah properti.
EVENT_OBJECT_VALUECHANGE UIA_RangeValueValuePropertyId dan UIA_ValueValuePropertyId berubah.
EVENT_SYSTEM_ALERT Tidak ada yang setara.
EVENT_SYSTEM_CAPTUREEND Tidak ada yang setara.
EVENT_SYSTEM_CAPTURESTART Tidak ada yang setara.
EVENT_SYSTEM_CONTEXTHELPEND Tidak ada yang setara.
EVENT_SYSTEM_CONTEXTHELPSTART Tidak ada yang setara.
EVENT_SYSTEM_DIALOGEND UIA_Window_WindowClosedEventId.
EVENT_SYSTEM_DIALOGSTART UIA_Window_WindowOpenedEventId.
EVENT_SYSTEM_DRAGDROPEND Tidak ada yang setara.
EVENT_SYSTEM_DRAGDROPSTART Tidak ada yang setara.
EVENT_SYSTEM_FOREGROUND UIA_AutomationFocusChangedEventId.
EVENT_SYSTEM_MENUEND UIA_MenuModeEndEventId.
EVENT_SYSTEM_MENUPOPUPEND UIA_MenuClosedEventId.
EVENT_SYSTEM_MENUPOPUPSTART UIA_MenuOpenedEventId.
EVENT_SYSTEM_MENUSTART UIA_MenuModeStartEventId.
EVENT_SYSTEM_MINIMIZEEND UIA_WindowWindowVisualStatePropertyId perubahan properti.
EVENT_SYSTEM_MINIMIZESTART UIA_WindowWindowVisualStatePropertyId perubahan properti.
EVENT_SYSTEM_MOVESIZEEND UIA_BoundingRectanglePropertyId perubahan properti.
EVENT_SYSTEM_MOVESIZESTART UIA_BoundingRectanglePropertyId perubahan properti.
EVENT_SYSTEM_SCROLLINGEND perubahan properti UIA_ScrollVerticalScrollPercentPropertyId atau UIA_ScrollHorizontalScrollPercentPropertyId.
EVENT_SYSTEM_SCROLLINGSTART perubahan properti UIA_ScrollVerticalScrollPercentPropertyId atau UIA_ScrollHorizontalScrollPercentPropertyId.
EVENT_SYSTEM_SOUND Tidak ada yang setara.
EVENT_SYSTEM_SWITCHEND Tidak setara, tetapi peristiwa UIA_AutomationFocusChangedEventId menandakan bahwa aplikasi baru telah menerima fokus.
EVENT_SYSTEM_SWITCHSTART Tidak ada yang setara.
Tidak ada yang setara. UIA_MultipleViewCurrentViewPropertyId perubahan properti.
Tidak ada yang setara. UIA_ScrollHorizontallyScrollablePropertyId perubahan properti.
Tidak ada yang setara. UIA_ScrollVerticallyScrollablePropertyId perubahan properti.
Tidak ada yang setara. UIA_ScrollHorizontalScrollPercentPropertyId perubahan properti.
Tidak ada yang setara. UIA_ScrollVerticalScrollPercentPropertyId perubahan properti.
Tidak ada yang setara. UIA_ScrollHorizontalViewSizePropertyId perubahan properti.
Tidak ada yang setara. UIA_ScrollVerticalViewSizePropertyId perubahan properti.
Tidak ada yang setara. UIA_ToggleToggleStatePropertyId perubahan properti.
Tidak ada yang setara. perubahan properti UIA_WindowWindowVisualStatePropertyId
Tidak ada yang setara. peristiwa UIA_AsyncContentLoadedEventId.
Tidak ada yang setara. peristiwa UIA_ToolTipOpenedEventId.

 

Mengakses Properti Aksesibilitas Aktif dan Objek dari Automasi UI

Fitur utama Automasi UI yang tidak tersedia di Microsoft Active Accessibility adalah kemampuan untuk mengambil beberapa properti dengan satu operasi lintas proses.

Klien Aksesibilitas Aktif Microsoft yang ada dapat memanfaatkan kemampuan ini dengan menggunakan antarmuka IUIAutomationLegacyIAccessiblePattern. Antarmuka ini mewakili pola kontrol yang mengekspos properti dan metode Aksesibilitas Aktif Microsoft pada elemen UI. Saat mengambil elemen, aplikasi dapat meminta agar pola kontrol ini dan propertinya di-cache.

IUIAutomationLegacyIAccessiblePattern juga memungkinkan klien untuk mendapatkan properti Aksesibilitas Aktif Microsoft dari elemen yang tidak memiliki dukungan asli untuk IAccessible.

Perubahan properti IUIAutomationLegacyIAccessiblePattern tidak menaikkan peristiwa Automasi UI.

Menambahkan Fungsionalitas Automasi UI ke Server Aksesibilitas Aktif

Gambaran Umum Pohon UI Automation

Ringkasan Properti UI Automation

Gambaran Umum Jenis Kontrol Automasi Antarmuka Pengguna

Ringkasan Peristiwa UI Automation

Aksesibilitas Aktif Microsoft