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.
- Les éléments DeviceInformationKind des appareils qui vous intéressent. Pour plus d’informations sur l’incidence de DeviceInformationKind sur la façon d’énumérer les appareils, voir Énumérer les appareils ;
- Comment créer une chaîne de filtre AQS (expliquée dans cette rubrique).
- les propriétés qui vous intéressent ; Les propriétés disponibles dépendent des éléments DeviceInformationKind. Pour plus d’informations, voir Propriétés d’informations d’appareil.
- Les protocoles que vous interrogez. Cela est nécessaire uniquement si vous recherchez des appareils sur un réseau sans fil ou filaire. Pour plus d’informations sur cette procédure, voir Énumérer des 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 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
Commentaires
https://aka.ms/ContentUserFeedback.
Bientôt disponible : Tout au long de 2024, nous allons supprimer progressivement GitHub Issues comme mécanisme de commentaires pour le contenu et le remplacer par un nouveau système de commentaires. Pour plus d’informations, consultezEnvoyer et afficher des commentaires pour