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.
- Il DeviceInformationKind dei dispositivi a cui si è interessato. Per ulteriori informazioni sull'impatto di DeviceInformationKind sull'enumerazione dei dispositivi, vedere Enumera dispositivi.
- Come compilare una stringa di filtro AQS (illustrata in questo argomento).
- Le proprietà a cui si è interessati. Le proprietà disponibili dipendono da DeviceInformationKind. Per altre informazioni, vedere Proprietà di informazione del dispositivo.
- Protocolli su cui si sta eseguendo una query. Questa operazione è necessaria solo se si cercano dispositivi tramite una rete wireless o cablata. Per altre informazioni su questa operazione, vedere Enumerare i dispositivi in una rete.
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:=[]