Condividi tramite


Creazione di un selettore dispositivo

Un selettore di dispositivo consente di limitare la ricerca dei dispositivi durante la loro enumerazione, che consente di ottenere risultati più pertinenti e migliorare le prestazioni del sistema.

Nella maggior parte degli scenari si ottiene un selettore di dispositivo da uno stack di dispositivi. Ad esempio, è possibile usare GetDeviceSelector per i dispositivi individuati tramite USB. Questi selettori di dispositivo restituiscono una stringa AQS (Advanced Query Syntax). Per altre informazioni sul formato AQS, vedere Uso della sintassi di query avanzata a livello di codice.

API importanti

Compilazione della stringa di filtro

In alcuni casi è necessario enumerare i dispositivi e un selettore di dispositivo fornito non è disponibile per lo scenario in uso. Un selettore di dispositivo è una stringa di filtro AQS che contiene le informazioni seguenti. Prima di creare una stringa di filtro, è necessario conoscere alcune informazioni chiave sui dispositivi da enumerare.

Quando si usano le API Windows.Devices.Enumeration , si combina spesso il selettore dispositivo con il tipo a cui si è interessati. L'elenco disponibile dei tipi di dispositivo è definito dall'enumerazione DeviceInformationKind . Questa combinazione di fattori consente di limitare i dispositivi disponibili a quelli a cui si è interessati. Se non si specifica il DeviceInformationKind o se il metodo in uso non fornisce un parametro DeviceInformationKind, il tipo predefinito è DeviceInterface.

Le API Windows.Devices.Enumeration usano la sintassi AQS canonica, ma non tutti gli operatori sono supportati. Per un elenco delle proprietà disponibili quando si costruisce la stringa di filtro, vedere Proprietà delle informazioni del dispositivo.

Attenzione

Non è possibile utilizzare proprietà personalizzate definite usando il formato durante la {GUID} PID costruzione della stringa di filtro AQS. Il motivo è che il tipo di proprietà è derivato dal nome noto della proprietà.

Nella tabella seguente sono elencati gli operatori AQS e i tipi di parametri supportati.

Operatore Tipi supportati
COP_EQUAL String, boolean, GUID, UInt16, UInt32
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 Stringa, matrice di stringhe, matrice booleana, matrice GUID, matrice UInt16, matrice UInt32
COP_VALUE_NOTCONTAINS Stringa, matrice di stringhe, matrice booleana, matrice GUID, matrice UInt16, matrice UInt32
COP_VALUE_STARTSWITH String
COP_VALUE_ENDSWITH String
COP_DOSWILDCARDS Non supportato
COP_WORD_EQUAL Non supportato
COP_WORD_STARTSWITH Non supportato
COP_APPLICATION_SPECIFIC Non supportato

È possibile specificare NULL per COP_EQUAL o COP_NOTEQUAL. Ciò si traduce in una proprietà senza valore o nel fatto che il valore non esiste. In AQS specificare NULL usando parentesi quadre vuote [].

Importante

Quando si usano gli operatori operatori COP_VALUE_CONTAINS e COP_VALUE_NOTCONTAINS, si comportano in modo diverso con stringhe e matrici di stringhe. Nel caso di una stringa, il sistema eseguirà una ricerca senza distinzione tra maiuscole e minuscole per verificare se il dispositivo contiene la stringa indicata come sottostringa. Nel caso di una matrice di stringhe, le sottostringhe non vengono cercate. Con la matrice di stringhe, viene eseguita la ricerca nella matrice per verificare se contiene l'intera stringa specificata. Non è possibile cercare una matrice di stringhe per verificare se gli elementi nella matrice contengono una sottostringa.

Se non è possibile creare una singola stringa di filtro AQS che conterrà i risultati in modo appropriato, è possibile filtrare i risultati dopo averli ricevuti. Tuttavia, è consigliabile limitare i risultati dalla stringa di filtro AQS iniziale il più possibile quando viene fornito alle API Windows.Devices.Enumeration. In questo modo è possibile migliorare le prestazioni dell'applicazione.

Esempi di stringa AQS

Gli esempi seguenti illustrano come usare la sintassi AQS per limitare i dispositivi da enumerare. Tutte queste stringhe di filtro vengono abbinate a un oggetto DeviceInformationKind per creare un filtro completo. Se non viene specificato alcun tipo, tenere presente che il tipo predefinito è DeviceInterface.

Quando questo filtro è associato a un DeviceInformationKind di DeviceInterface enumera tutti gli oggetti che contengono la classe di Interfaccia Acquisizione Audio e che sono attualmente abilitati. = viene convertito in COP_EQUALS.

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

Quando questo filtro viene associato a un DeviceInformationKind di Dispositivo, enumera tutti gli oggetti con almeno un ID hardware di GenCdRom. ~~ viene convertito in COP_VALUE_CONTAINS.

System.Devices.HardwareIds:~~"GenCdRom"

Quando questo filtro è associato a un DeviceInformationKind di DeviceContainer, enumera tutti gli oggetti con un nome di modello contenente la sottostringa Microsoft. ~~ viene convertito in COP_VALUE_CONTAINS.

System.Devices.ModelName:~~"Microsoft"

Quando questo filtro è associato a un DeviceInformationKind di DeviceInterface, enumera tutti gli oggetti con un nome che inizia con la sottostringa Microsoft. ~< viene convertito in COP_STARTSWITH.

System.ItemNameDisplay:~<"Microsoft"

Quando questo filtro viene associato a un oggetto DeviceInformationKind di Dispositivo, enumera tutti gli oggetti con un insieme di proprietà System.Devices.IpAddress. <>[] viene convertito in COP_NOTEQUALS combinato con un valore NULL .

System.Devices.IpAddress:<>[]

Quando questo filtro viene associato a un oggetto DeviceInformationKind di Dispositivo, enumera tutti gli oggetti senza un insieme di proprietà System.Devices.IpAddress. =[] viene convertito in COP_EQUALS combinato con un valore NULL .

System.Devices.IpAddress:=[]

Vedi anche