Creare un selettore del dispositivo

Un selettore di dispositivo consente di limitare la ricerca dei dispositivi durante l'enumerazione dei dispositivi, 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.

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 usa il Windows. Devices.Enumeration API, si combina spesso il selettore di dispositivo con il tipo di dispositivo 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 specifichi DeviceInformationKind o 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 sul dispositivo.

Caution

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

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

Operatore Tipi supportati
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 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 che il valore non esiste. In AQS, si specifica NULL usando parentesi quadre vuote [].

Important

Quando si usano gli 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 un'unica stringa di filtro AQS per delimitare adeguatamente i risultati, è possibile filtrarli dopo averli ricevuti. Tuttavia, è consigliabile limitare il più possibile i risultati restituiti dalla stringa di filtro AQS iniziale quando la si passa alle API Windows.Devices.Enumeration. Ciò consentirà di migliorare le prestazioni dell'applicazione.

Esempi di stringhe 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 DeviceInformationKind per creare un filtro completo. Se non viene specificato alcun tipo, tenere presente che il tipo predefinito è DeviceInterface.

Quando questo filtro viene associato a un DeviceInformationKind di DeviceInterface, enumera tutti gli oggetti che contengono la classe di interfaccia Audio Capture 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 è associato a un DeviceInformationKind di Device, enumera tutti gli oggetti con almeno un ID hardware di GenCdRom. ~~ viene convertito in COP_VALUE_CONTAINS.

System.Devices.HardwareIds:~~"GenCdRom"

Quando questo filtro viene 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 viene associato a un DeviceInformationKind di DeviceInterface, enumera tutti gli oggetti con un nome che iniziano con la sottostringa Microsoft. ~< viene convertito in COP_STARTSWITH.

System.ItemNameDisplay:~<"Microsoft"

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

System.Devices.IpAddress:<>[]

Quando questo filtro è associato a un DeviceInformationKind di Device, enumera tutti gli oggetti che non dispongono di un set di proprietà System.Devices.IpAddress. =[] viene convertito in COP_EQUALS combinato con un valore NULL .

System.Devices.IpAddress:=[]

Vedere anche