Créer un sélecteur d’appareil

Un sélecteur d’appareil vous permet de limiter les appareils à rechercher lors de l’énumération des appareils, ce qui vous permet d’obtenir des résultats plus pertinents et d’améliorer les performances du système.

Dans la plupart des scénarios, vous obtenez un sélecteur d’appareil à partir d’une pile d’appareils. Par exemple, vous pouvez utiliser GetDeviceSelector pour les appareils découverts via USB. Ces sélecteurs d’appareils retournent une chaîne AQS (Advanced Query Syntax). Pour plus d’informations sur le format AQS, consultez Utilisation de la syntaxe de requête avancée par programmation.

Construction de la chaîne de filtre

Il existe certains cas où vous devez énumérer les appareils et qu’un sélecteur d’appareil fourni n’est pas disponible pour votre scénario. Un sélecteur d’appareil est une chaîne de filtre AQS qui contient les informations suivantes. Avant de créer une chaîne de filtre, vous devez connaître certaines informations clés sur les appareils que vous souhaitez énumérer.

Lorsque vous utilisez le Windows. Devices.Enumeration API, vous combinez fréquemment le sélecteur d’appareil avec le type d’appareil qui vous intéresse. La liste disponible des types d’appareils est définie par l’énumération DeviceInformationKind. Cette combinaison de facteurs vous permet de limiter les appareils disponibles pour ceux qui vous intéressent. Si vous ne spécifiez pas DeviceInformationKind ou si la méthode que vous utilisez ne fournit pas de paramètre DeviceInformationKind , le type par défaut est DeviceInterface.

Les API Windows.Devices.Enumeration utilisent la syntaxe AQS canonique, mais tous les opérateurs ne sont pas pris en charge. Pour obtenir la liste des propriétés disponibles lorsque vous construisez votre chaîne de filtre, consultez les propriétés d’informations sur l’appareil.

Avertissement

Les propriétés personnalisées définies à l’aide du format {GUID} PID ne peuvent pas être utilisées lors de la création de votre chaîne de filtre AQS. Cela est dû au fait que le type de propriété est dérivé du nom de propriété connu.

Le tableau suivant répertorie les opérateurs AQS et les types de paramètres qu’ils prennent en charge.

Opérateur Types pris en charge
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 Chaîne, tableau de chaînes, tableau booléen, tableau GUID, tableau UInt16, tableau UInt32
COP_VALUE_NOTCONTAINS Chaîne, tableau de chaînes, tableau booléen, tableau GUID, tableau UInt16, tableau UInt32
COP_VALUE_STARTSWITH String
COP_VALUE_ENDSWITH String
COP_DOSWILDCARDS Non pris en charge
COP_WORD_EQUAL Non pris en charge
COP_WORD_STARTSWITH Non pris en charge
COP_APPLICATION_SPECIFIC Non pris en charge

Vous pouvez spécifier NULL pour COP_EQUAL ou COP_NOTEQUAL. Cela se traduit par une propriété sans valeur, ou que la valeur n’existe pas. Dans AQS, vous spécifiez NULL à l’aide de crochets vides [].

Important

Lorsque vous utilisez les opérateurs COP_VALUE_CONTAINS et COP_VALUE_NOTCONTAINS , ils se comportent différemment avec des chaînes et des tableaux de chaînes. S’il s’agit d’une chaîne de caractères, le système effectuera une recherche insensible à la casse afin de déterminer si l’appareil contient la chaîne indiquée en tant que sous-chaîne. Dans le cas d’un tableau de chaînes, les sous-chaînes ne sont pas recherchées. Avec le tableau de chaînes, le tableau est recherché pour voir s’il contient la chaîne spécifiée entière. Il n’est pas possible de rechercher un tableau de chaînes pour voir si les éléments du tableau contiennent une sous-chaîne.

Si vous ne pouvez pas créer une seule chaîne de filtre AQS qui limite vos résultats de manière appropriée, vous pouvez filtrer vos résultats après leur réception. Toutefois, nous vous recommandons de limiter autant que possible les résultats renvoyés par votre chaîne de filtre AQS initiale lorsque vous la fournissez aux API Windows.Devices.Enumeration. Cela permet d’améliorer les performances de votre application.

Exemples de chaîne AQS

Les exemples suivants montrent comment la syntaxe AQS peut être utilisée pour limiter les appareils que vous souhaitez énumérer. Toutes ces chaînes de filtre sont associées à un DeviceInformationKind pour créer un filtre complet. Si aucun type n’est spécifié, n’oubliez pas que le type par défaut est DeviceInterface.

Lorsque ce filtre est associé à un DeviceInformationKind de DeviceInterface, il énumère tous les objets qui contiennent la classe d’interface Audio Capture et qui sont actuellement activés. = traduit en COP_EQUALS.

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

Lorsque ce filtre est associé à un DeviceInformationKind de Device, il énumère tous les objets qui ont au moins un ID matériel de GenCdRom. ~~ traduit en COP_VALUE_CONTAINS.

System.Devices.HardwareIds:~~"GenCdRom"

Lorsque ce filtre est associé à un DeviceInformationKind de DeviceContainer, il énumère tous les objets qui ont un nom de modèle contenant la sous-chaîne Microsoft. ~~ traduit en COP_VALUE_CONTAINS.

System.Devices.ModelName:~~"Microsoft"

Lorsque ce filtre est associé à un DeviceInformationKind de DeviceInterface, il énumère tous les objets dont le nom commence par la sous-chaîne Microsoft. ~< traduit en COP_STARTSWITH.

System.ItemNameDisplay:~<"Microsoft"

Lorsque ce filtre est associé à un DeviceInformationKind de Device, il énumère tous les objets qui ont un jeu de propriétés System.Devices.IpAddress. <>[] se traduit par COP_NOTEQUALS combinée à une valeur NULL .

System.Devices.IpAddress:<>[]

Lorsque ce filtre est associé à un DeviceInformationKind de Device, il énumère tous les objets qui n’ont pas de jeu de propriétés System.Devices.IpAddress. =[] se traduit par COP_EQUALS combinée à une valeur NULL .

System.Devices.IpAddress:=[]

Voir aussi