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.

API importantes

Génération 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.

  • DeviceInformationKind des appareils qui vous intéressent. Pour plus d’informations sur l’impact de DeviceInformationKind sur l’énumération des appareils, consultez Énumérer les appareils.
  • Comment créer une chaîne de filtre AQS (expliquée dans cette rubrique).
  • Propriétés qui vous intéressent. Les propriétés disponibles dépendent de DeviceInformationKind. Pour plus d’informations, consultez les propriétés d’informations sur l’appareil.
  • Protocoles que vous interrogez. Cela n’est nécessaire que si vous recherchez des appareils sur un réseau sans fil ou câblé. Pour plus d’informations sur cette opération, consultez Énumérer les appareils sur un réseau.

Lorsque vous utilisez les API Windows.Devices.Enumeration , 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.

Attention

Les propriétés personnalisées définies à l’aide du format ne peuvent pas être utilisées lors de la {GUID} PID construction 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 Chaîne
COP_VALUE_ENDSWITH Chaîne
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. Dans le cas d’une chaîne, le système effectue une recherche sans respect de la casse pour voir si l’appareil contient la chaîne indiquée comme 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 les résultats de votre chaîne de filtre AQS initiale autant que possible lorsque vous le 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 de capture audio 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. ~< se traduit par COP_STARTSWITH.

System.ItemNameDisplay:~<"Microsoft"

Lorsque ce filtre est associé à un DeviceInformationKind de Device, il énumère tous les objets dont la propriété System.Devices.IpAddress est définie. <>[] se traduit par COP_NOTEQUALS combiné à 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 propriété System.Devices.IpAddress définie. =[] se traduit par COP_EQUALS combiné à une valeur NULL .

System.Devices.IpAddress:=[]

Voir aussi