Bagikan melalui


Properti UI Automation untuk Klien

Catatan

Dokumentasi ini ditujukan untuk pengembang .NET Framework yang ingin menggunakan kelas UI Automation terkelola yang ditentukan pada namespace System.Windows.Automation. Untuk informasi terbaru tentang UI Automation, lihat API Automasi Windows: Automasi Antarmuka Pengguna.

Gambaran umum ini memperkenalkan Anda pada properti UI Automation saat terekspos ke aplikasi klien Automation UI.

Properti pada objek AutomationElement berisi informasi tentang elemen antarmuka pengguna (UI), biasanya kontrol. Properti dari suatu AutomationElement bersifat generik; yaitu, tidak spesifik untuk satu jenis kontrol. Banyak dari properti ini terekspos dalam struktur AutomationElement.AutomationElementInformation.

Pola kontrol juga memiliki properti. Properti pola kontrol khusus untuk pola tersebut. Misalnya, ScrollPattern memiliki properti yang memungkinkan aplikasi klien untuk menemukan apakah jendela dapat digulir secara vertikal atau horizontal, dan berapa ukuran tampilan saat ini dan di mana posisi gulirnya. Pola kontrol mengekspos semua propertinya melalui struktur; misalnya, ScrollPattern.ScrollPatternInformation.

Properti Automasi UI bersifat baca-saja. Untuk mengatur properti kontrol, Anda harus menggunakan metode pola kontrol yang sesuai. Misalnya, gunakan Scroll untuk mengubah nilai posisi jendela gulir.

Untuk meningkatkan performa, nilai properti kontrol dan pola kontrol dapat di-cache saat objek AutomationElement diambil. Untuk informasi selengkapnya, lihat Penembolokan pada Klien Automasi UI.

ID Properti

Pengidentifikasi properti (ID) adalah nilai konstanta unik yang disarikan dalam objek AutomationProperty. Aplikasi klien UI Automation mendapatkan ID ini dari kelas AutomationElement atau dari kelas pola kontrol yang sesuai, seperti ScrollPattern. Penyedia UI Automation mendapatkannya dari AutomationElementIdentifiers atau dari salah satu kelas pengidentifikasi pola kontrol, seperti ScrollPatternIdentifiers.

Id numerik dari AutomationProperty digunakan oleh penyedia untuk mengidentifikasi properti yang sedang dikueri dalam metode IRawElementProviderSimple.GetPropertyValue. Secara umum, aplikasi klien tidak perlu memeriksa Id. ProgrammaticName hanya digunakan untuk tujuan debugging dan diagnostik.

Kondisi Properti

ID properti digunakan dalam membangun objek PropertyCondition yang digunakan untuk menemukan objek AutomationElement. Misalnya, Anda mungkin ingin menemukan AutomationElement yang memiliki nama tertentu, atau semua kontrol yang diaktifkan. Masing-masing PropertyCondition menentukan pengidentifikasi AutomationProperty dan nilai yang properti itu harus sesuaikan.

Untuk informasi selengkapnya, lihat topik referensi berikut:

Mengambil Properti

Beberapa properti dari AutomationElement dan semua properti kelas pola kontrol diekspos sebagai properti berlapis dari properti Current atau Cached dari AutomationElement atau objek pola kontrol.

Selain itu, AutomationElement apa pun atau properti pola kontrol, termasuk properti yang tidak tersedia dalam struktur Cached atau Current, dapat diambil dengan menggunakan salah satu metode berikut:

Metode ini menawarkan performa yang sedikit lebih baik dan juga akses ke berbagai properti.

Contoh kode berikut menunjukkan dua cara mengambil properti pada AutomationElement.

// elementList is an AutomationElement.

// The following two calls are equivalent.
string name = elementList.Current.Name;
name = elementList.GetCurrentPropertyValue(AutomationElement.NameProperty) as string;
' elementList is an AutomationElement.
' The following two calls are equivalent.
Dim name As String = elementList.Current.Name
name = CStr(elementList.GetCurrentPropertyValue(AutomationElement.NameProperty))

Untuk mengambil properti pola kontrol yang didukung oleh AutomationElement, Anda tidak perlu mengambil objek pola kontrol. Cukup teruskan salah satu pengidentifikasi properti pola ke metode itu.

Contoh kode berikut menunjukkan dua cara mengambil properti pada pola kontrol.

// elementList is an AutomationElement representing a list box.
// Error-checking is omitted. Assume that elementList is known to support SelectionPattern.

SelectionPattern selectPattern =
    elementList.GetCurrentPattern(SelectionPattern.Pattern) as SelectionPattern;
bool isMultipleSelect = selectPattern.Current.CanSelectMultiple;

// The following call is equivalent to the one above.
isMultipleSelect = (bool)
    elementList.GetCurrentPropertyValue(SelectionPattern.CanSelectMultipleProperty);
' elementList is an AutomationElement representing a list box.
' Error-checking is omitted. Assume that elementList is known to support SelectionPattern.
Dim selectPattern As SelectionPattern = _
    DirectCast(elementList.GetCurrentPattern(SelectionPattern.Pattern), SelectionPattern)
Dim isMultipleSelect As Boolean = selectPattern.Current.CanSelectMultiple

' The following call is equivalent to the one above.
isMultipleSelect = CBool(elementList.GetCurrentPropertyValue(SelectionPattern.CanSelectMultipleProperty))

Metode Get mengembalikan Object. Aplikasi harus mentransmisikan objek yang dikembalikan ke jenis yang tepat sebelum menggunakan nilai.

Nilai Properti Default

Jika penyedia UI Automation tidak menerapkan properti, sistem UI Automation dapat menyediakan nilai default. Misalnya, jika penyedia untuk kontrol tidak mendukung properti yang diidentifikasi oleh HelpTextProperty, UI Automation mengembalikan string kosong. Demikian pula, jika penyedia tidak mendukung properti yang diidentifikasi oleh IsDockPatternAvailableProperty, UI Automation mengembalikan false.

Anda dapat mengubah perilaku ini dengan menggunakan beban lebih metode AutomationElement.GetCachedPropertyValue dan AutomationElement.GetCurrentPropertyValue. Jika Anda menentukan true sebagai parameter kedua, UI Automation tidak mengembalikan nilai default, tetapi sebaliknya mengembalikan nilai khusus NotSupported.

Contoh kode berikut mencoba mengambil properti dari elemen, dan jika properti tidak didukung, nilai yang ditentukan-aplikasi digunakan sebagai gantinya.

// elementList is an AutomationElement.
object help = elementList.GetCurrentPropertyValue(AutomationElement.HelpTextProperty, true);
if (help == AutomationElement.NotSupported)
{
    help = "No help available";
}
string helpText = (string)help;
' elementList is an AutomationElement.
Dim help As Object = elementList.GetCurrentPropertyValue(AutomationElement.HelpTextProperty, True)
If help Is AutomationElement.NotSupported Then
    help = "No help available"
End If
Dim helpText As String = CStr(help)

Untuk menemukan properti apa yang didukung oleh elemen, gunakan GetSupportedProperties. Ini mengembalikan array pengidentifikasi AutomationProperty.

Peristiwa yang diubah-Properti

Saat nilai properti pada AutomationElement atau pola kontrol berubah, peristiwa akan dinaikkan. Aplikasi dapat berlangganan peristiwa tersebut dengan memanggil AddAutomationPropertyChangedEventHandler, menyediakan array pengidentifikasi AutomationProperty sebagai parameter terakhir untuk menentukan properti yang diminati.

Di AutomationPropertyChangedEventHandler, Anda dapat mengidentifikasi properti yang telah berubah dengan memeriksa anggota Property dari argumen peristiwa. Argumen juga berisi nilai lama dan baru dari properti UI Automation yang telah berubah. Nilai-nilai ini berjenis Object dan harus ditransmisikan ke jenis yang benar sebelum digunakan.

Properti AutomationElement Tambahan

Selain struktur properti Current dan Cached, AutomationElement memiliki properti berikut, yang diambil melalui pengakses properti sederhana.

Properti Deskripsi
CachedChildren Kumpulan objek AutomationElement turunan yang ada di cache.
CachedParent Objek induk AutomationElement yang ada di cache.
FocusedElement (Properti statis) AutomationElement yang memiliki fokus input.
RootElement (Properti statis) AutomationElement akar.

Lihat juga