Partager via


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 cas, vous obtenez un sélecteur d’appareils à partir d’une pile d’appareils. Par exemple, vous pouvez utiliser GetDeviceSelector pour les appareils détectés via sur USB. Ces sélecteurs d’appareils retournent une chaîne AQS (syntaxe de recherche avancée). Pour plus d’informations sur le format AQS, consultez Utilisation de la syntaxe de requête avancée par programmation.

API importantes

Création de la chaîne de filtre

Il existe quelques cas où vous devez énumérer des appareils alors qu’aucun sélecteur d’appareils fourni n’est pas disponible pour votre scénario. Un sélecteur d’appareils 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 certains éléments clés d’information sur les appareils que vous souhaitez énumérer.

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 des types d’appareils disponibles est définie par l’énumération DeviceInformationKind. Cette combinaison de facteurs vous permet de limiter les appareils disponibles à ceux qui vous intéressent. Si vous ne spécifiez pas le 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 lors de la création de la chaîne de filtre, voir Propriétés d’informations sur l’appareil.

Attention

Les propriétés personnalisées définies à l’aide du {GUID} PID format ne peuvent pas être utilisées lors de la construction de votre chaîne de filtre AQS. Cela vient du fait que le type de propriété est dérivé du nom de propriété bien 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 Chaîne, booléen, GUID, UInt16, UInt32
COP_NOTEQUAL Chaîne, booléen, 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 de booléens, tableau de GUID, tableau d’UInt16, tableau d’UInt32
COP_VALUE_NOTCONTAINS Chaîne, tableau de chaînes, tableau de booléens, tableau de GUID, tableau d’UInt16, tableau d’UInt32
COP_VALUE_STARTSWITH String
COP_VALUE_ENDSWITH String
COP_DOSWILDCARDS Non prise en charge
COP_WORD_EQUAL Non prise en charge
COP_WORD_STARTSWITH Non prise en charge
COP_APPLICATION_SPECIFIC Non prise en charge

Vous pouvez spécifier NULL pour COP_EQUAL ou COP_NOTEQUAL. Cela se traduit par une propriété sans valeur ou par le fait 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 les chaînes et les 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, aucune recherche n’est effectuée dans les sous-chaînes. Avec le tableau de chaînes, une recherche est effectuée pour voir s’il contient la chaîne spécifiée complète. Il n’est pas possible d’effectuer une recherche dans un tableau de chaînes pour voir si les éléments qui le composent contiennent une sous-chaîne.

Si vous ne pouvez pas créer de chaîne de filtre AQS unique qui parcourt vos résultats de manière appropriée, vous pouvez filtrer les résultats après les avoir reçus. Toutefois, nous vous recommandons de limiter autant que possible les résultats de 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înes AQS

Les exemples suivants montrent comment la syntaxe AQS permet de 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 d’appareil n’est spécifié, n’oubliez pas que le type par défaut est DeviceInterface.

Lorsque ce filtre est associé à un type de DeviceInformationKindDeviceInterface, il énumère tous les objets qui contiennent la classe d’interface de capture audio et qui sont activés. = se traduit par COP_EQUALS.

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

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

System.Devices.HardwareIds:~~"GenCdRom"

Lorsque ce filtre est associé à un type de DeviceInformationKindDeviceContainer, 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 type de DeviceInformationKindDeviceInterface, il énumère tous les objets qui ont un nom commençant par la sous-chaîne Microsoft. ~< traduit en COP_STARTSWITH.

System.ItemNameDisplay:~<"Microsoft"

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

System.Devices.IpAddress:<>[]

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

System.Devices.IpAddress:=[]

Voir aussi