Membangun pemilih perangkat

Pemilih perangkat memungkinkan Anda membatasi perangkat untuk dicari saat menghitung perangkat, yang membantu Anda mendapatkan hasil yang lebih relevan dan meningkatkan performa sistem.

Dalam kebanyakan skenario, Anda mendapatkan pemilih perangkat dari tumpukan perangkat. Misalnya, Anda dapat menggunakan GetDeviceSelector untuk perangkat yang ditemukan melalui USB. Pemilih perangkat ini mengembalikan string Advanced Query Syntax (AQS). Untuk detail selengkapnya tentang format AQS, lihat Menggunakan Sintaks Kueri Tingkat Lanjut Secara Terprogram.

API penting

Membangun string filter

Ada beberapa kasus di mana Anda perlu menghitung perangkat dan pemilih perangkat yang disediakan tidak tersedia untuk skenario Anda. Pemilih perangkat adalah string filter AQS yang berisi informasi berikut. Sebelum membuat string filter, Anda perlu mengetahui beberapa potongan kunci informasi tentang perangkat yang ingin Anda hitung.

Saat menggunakan API Windows.Devices.Enumeration , Anda sering menggabungkan pemilih perangkat dengan jenis perangkat yang Anda minati. Daftar jenis perangkat yang tersedia ditentukan oleh enumerasi DeviceInformationKind . Kombinasi faktor ini membantu Anda membatasi perangkat yang tersedia untuk perangkat yang Anda minati. Jika Anda tidak menentukan DeviceInformationKind, atau metode yang Anda gunakan tidak menyediakan parameter DeviceInformationKind , jenis defaultnya adalah DeviceInterface.

API Windows.Devices.Enumeration menggunakan sintaks AQS kanonis, tetapi tidak semua operator didukung. Untuk daftar properti yang tersedia saat Anda membuat string filter, lihat Properti informasi perangkat.

Perhatian

Properti kustom yang ditentukan menggunakan {GUID} PID format tidak dapat digunakan saat membuat string filter AQS Anda. Ini karena jenis properti berasal dari nama properti terkenal.

Tabel berikut mencantumkan operator AQS dan jenis parameter apa yang mereka dukung.

Operator Jenis yang didukung
COP_EQUAL String, boolean, GUID, UInt16, UInt32
COP_NOTEQUAL String, boolean, GUID, UInt16, UInt32
COP_LESSTHAN UInt16, UInt32
COP_GREATERTHAN UInt16, UInt32
COP_LESSTHANOREQUAL UInt16, UInt32
COP_GREATERTHANOREQUAL UInt16, UInt32
COP_VALUE_CONTAINS String, array string, array boolean, array GUID, array UInt16, array UInt32
COP_VALUE_NOTCONTAINS String, array string, array boolean, array GUID, array UInt16, array UInt32
COP_VALUE_STARTSWITH String
COP_VALUE_ENDSWITH String
COP_DOSWILDCARDS Tidak didukung
COP_WORD_EQUAL Tidak didukung
COP_WORD_STARTSWITH Tidak didukung
COP_APPLICATION_SPECIFIC Tidak didukung

Anda dapat menentukan NULL untuk COP_EQUAL atau COP_NOTEQUAL. Ini diterjemahkan ke properti tanpa nilai, atau bahwa nilai tidak ada. Di AQS, Anda menentukan NULL dengan menggunakan tanda kurung kosong [].

Penting

Saat menggunakan operator COP_VALUE_CONTAINS dan COP_VALUE_NOTCONTAINS , mereka ber perilaku berbeda dengan string dan array string. Dalam kasus string, sistem akan melakukan pencarian yang tidak peka huruf besar/kecil untuk melihat apakah perangkat berisi string yang ditunjukkan sebagai substring. Dalam kasus array string, substring tidak dicari. Dengan array string, array dicari untuk melihat apakah array berisi seluruh string yang ditentukan. Tidak dimungkinkan untuk mencari array string untuk melihat apakah elemen dalam array berisi substring.

Jika Anda tidak dapat membuat satu string filter AQS yang akan mencakup hasil Anda dengan tepat, Anda dapat memfilter hasil setelah menerimanya. Namun, sebaiknya batasi hasil dari string filter AQS awal Anda sebanyak mungkin ketika Anda memberikannya ke API Windows.Devices.Enumeration . Ini akan membantu meningkatkan performa aplikasi Anda.

Contoh string AQS

Contoh berikut menunjukkan bagaimana sintaks AQS dapat digunakan untuk membatasi perangkat yang ingin Anda hitung. Semua string filter ini dipasangkan dengan DeviceInformationKind untuk membuat filter lengkap. Jika tidak ada jenis yang ditentukan, ingatlah bahwa jenis defaultnya adalah DeviceInterface.

Ketika filter ini dipasangkan dengan DeviceInformationKind dari DeviceInterface, filter ini menghitung semua objek yang berisi kelas antarmuka Audio Capture dan yang saat ini diaktifkan. = diterjemahkan ke COP_EQUALS.

System.Devices.InterfaceClassGuid:="{2eef81be-33fa-4800-9670-1cd474972c3f}" AND
System.Devices.InterfaceEnabled:=System.StructuredQueryType.Boolean#True

Ketika filter ini dipasangkan dengan DeviceInformationKind of Device, filter ini menghitung semua objek yang memiliki setidaknya satu id perangkat keras GenCdRom. ~~ diterjemahkan ke COP_VALUE_CONTAINS.

System.Devices.HardwareIds:~~"GenCdRom"

Ketika filter ini dipasangkan dengan DeviceInformationKind dari DeviceContainer, filter ini menghitung semua objek yang memiliki nama model yang berisi substring Microsoft. ~~ diterjemahkan ke COP_VALUE_CONTAINS.

System.Devices.ModelName:~~"Microsoft"

Ketika filter ini dipasangkan dengan DeviceInformationKind dari DeviceInterface, filter ini menghitung semua objek yang memiliki nama yang dimulai dengan substring Microsoft. ~< diterjemahkan ke COP_STARTSWITH.

System.ItemNameDisplay:~<"Microsoft"

Ketika filter ini dipasangkan dengan DeviceInformationKind of Device, filter ini menghitung semua objek yang memiliki kumpulan properti System.Devices.IpAddress . <>[] diterjemahkan ke COP_NOTEQUALS dikombinasikan dengan nilai NULL .

System.Devices.IpAddress:<>[]

Ketika filter ini dipasangkan dengan DeviceInformationKind dari Perangkat, filter ini menghitung semua objek yang tidak memiliki set properti System.Devices.IpAddress . =[] diterjemahkan ke COP_EQUALS dikombinasikan dengan nilai NULL .

System.Devices.IpAddress:=[]

Lihat juga