Erstellen einer Geräteauswahl

Mit einem Gerätefilter können Sie die Geräte begrenzen, die bei der Geräteenumeration durchsucht werden. So erhalten Sie relevantere Ergebnisse und verbessern die Systemleistung.

In den meisten Szenarien erhalten Sie eine Geräteauswahl aus einem Gerätestapel. Beispielsweise können Sie GetDeviceSelector für Geräte verwenden, die über USB erkannt wurden. Diese Geräteselektoren geben eine Zeichenfolge für erweiterte Abfragesyntax (Advanced Query Syntax, AQS) zurück. Weitere Informationen zum AQS-Format finden Sie unter Programmgesteuertes Verwenden der erweiterten Abfragesyntax.

Erstellen der Filterzeichenfolge

Es gibt einige Fälle, in denen Sie Geräte aufzählen müssen und eine bereitgestellte Geräteauswahl für Ihr Szenario nicht verfügbar ist. Eine Geräteauswahl ist eine AQS-Filterzeichenfolge, die die folgenden Informationen enthält. Bevor Sie eine Filterzeichenfolge erstellen, müssen Sie einige wichtige Informationen zu den Geräten kennen, die Sie auflisten möchten.

  • Die DeviceInformationKind der Geräte, für die Sie sich interessieren. Weitere Informationen dazu, wie deviceInformationKind sich auf das Aufzählen von Geräten auswirkt, finden Sie unter Aufzählen von Geräten.
  • Erstellen einer AQS-Filterzeichenfolge (in diesem Thema erläutert).
  • Die Eigenschaften, an denen Sie interessiert sind. Die verfügbaren Eigenschaften hängen vom DeviceInformationKind ab. Weitere Informationen finden Sie unter Geräteinformationseigenschaften .
  • Die Protokolle, über die Sie Abfragen durchführen. Dies ist nur erforderlich, wenn Sie nach Geräten über ein drahtloses oder kabelgebundenes Netzwerk suchen. Weitere Informationen hierzu finden Sie unter Aufzählen von Geräten über ein Netzwerk.

Bei Verwendung des Windows. Devices.Enumeration-APIs kombinieren Sie häufig die Geräteauswahl mit der Geräteart, an der Sie interessiert sind. Die verfügbare Liste der Gerätetypen wird durch die Enumeration DeviceInformationKind definiert. Diese Kombination von Faktoren hilft Ihnen, die Geräte zu begrenzen, die für diejenigen verfügbar sind, an denen Sie interessiert sind. Wenn Sie das verwendete GerätInformationKind nicht angeben oder die verwendete Methode keinen DeviceInformationKind-Parameter bereitstellt, ist die Standardart "DeviceInterface".

Die Windows. Devices.Enumeration-APIs verwenden kanonische AQS-Syntax, aber nicht alle Operatoren werden unterstützt. Eine Liste der Eigenschaften, die beim Erstellen der Filterzeichenfolge verfügbar sind, finden Sie unter Geräteinformationseigenschaften.

Vorsicht

Benutzerdefinierte Eigenschaften, die mithilfe des {GUID} PID Formats definiert sind, können beim Erstellen der AQS-Filterzeichenfolge nicht verwendet werden. Dies liegt daran, dass der Eigenschaftstyp vom bekannten Eigenschaftennamen abgeleitet wird.

In der folgenden Tabelle sind die AQS-Operatoren und die unterstützten Parametertypen aufgeführt.

Bediener Unterstützte Typen
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 Zeichenfolge, Array von Zeichenfolgen, Array von booleschen Werten, GUID-Array, UInt16-Array, UInt32-Array
COP_VALUE_NOTCONTAINS Zeichenfolge, Array von Zeichenfolgen, Array von booleschen Werten, GUID-Array, UInt16-Array, UInt32-Array
COP_VALUE_STARTSWITH String
COP_VALUE_ENDSWITH String
COP_DOSWILDCARDS Nicht unterstützt
COP_WORD_EQUAL Nicht unterstützt
COP_WORD_STARTSWITH Nicht unterstützt
COP_APPLICATION_SPECIFIC Nicht unterstützt

Sie können NULL für COP_EQUAL oder COP_NOTEQUAL angeben. Dies wird in eine Eigenschaft ohne Wert übersetzt oder der Wert ist nicht vorhanden. In AQS geben Sie NULL mit leeren Klammern [] an.

Important

Bei Verwendung der operatoren COP_VALUE_CONTAINS und COP_VALUE_NOTCONTAINS verhalten sie sich mit Zeichenfolgen und Zeichenfolgenarrays anders. Im Fall einer Zeichenfolge führt das System eine Suche ohne Beachtung der Groß-/Kleinschreibung durch, um festzustellen, ob die angegebene Zeichenfolge im Gerät als Teilzeichenfolge enthalten ist. Im Fall eines Arrays von Zeichenfolgen wird nicht nach Teilzeichenfolgen gesucht. Mit dem Zeichenfolgenarray wird das Array durchsucht, um festzustellen, ob es die gesamte angegebene Zeichenfolge enthält. Es ist nicht möglich, ein Zeichenfolgenarray zu durchsuchen, um festzustellen, ob die Elemente im Array eine Teilzeichenfolge enthalten.

Wenn Sie keine einzelne AQS-Filterzeichenfolge erstellen können, die die Ergebnisse entsprechend eingrenzt, können Sie die Ergebnisse nach dem Empfang filtern. Wir empfehlen jedoch, die Ergebnisse Ihrer anfänglichen AQS-Filterzeichenfolge so weit wie möglich einzuschränken, wenn Sie sie an die Windows.Devices.Enumeration-APIs übergeben. Dadurch wird die Leistung Ihrer Anwendung verbessert.

AQS-Zeichenfolgenbeispiele

Die folgenden Beispiele veranschaulichen, wie die AQS-Syntax verwendet werden kann, um die Geräte einzuschränken, die Sie auflisten möchten. Alle diese Filterzeichenfolgen werden mit einem DeviceInformationKind gekoppelt, um einen vollständigen Filter zu erstellen. Wenn keine Art angegeben ist, denken Sie daran, dass die Standardart "DeviceInterface" lautet.

Wenn dieser Filter mit einem DeviceInformationKind von DeviceInterface gekoppelt ist, werden alle Objekte aufgelistet, die die Audio Capture-Schnittstellenklasse enthalten und die derzeit aktiviert sind. = wird in COP_EQUALS übersetzt.

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

Wenn dieser Filter mit einem DeviceInformationKind von Device gekoppelt ist, listet er alle Objekte auf, die mindestens eine Hardware-ID von GenCdRom aufweisen. ~~ wird in COP_VALUE_CONTAINS übersetzt.

System.Devices.HardwareIds:~~"GenCdRom"

Wenn dieser Filter mit einem DeviceInformationKind von DeviceContainer gekoppelt ist, werden alle Objekte aufgelistet, die einen Modellnamen enthalten, der die Teilzeichenfolge Microsoft enthält. ~~ wird in COP_VALUE_CONTAINS übersetzt.

System.Devices.ModelName:~~"Microsoft"

Wenn dieser Filter mit einer DeviceInformationKind von DeviceInterface gekoppelt ist, listet er alle Objekte auf, die einen Namen haben, beginnend mit der Teilzeichenfolge Microsoft. ~< wird in COP_STARTSWITH übersetzt.

System.ItemNameDisplay:~<"Microsoft"

Wenn dieser Filter mit einem DeviceInformationKind von Device gekoppelt ist, listet er alle Objekte auf, die über einen System.Devices.IpAddress-Eigenschaftensatz verfügen. <>[] entspricht COP_NOTEQUALS in Kombination mit einem NULL-Wert.

System.Devices.IpAddress:<>[]

Wenn dieser Filter mit einem DeviceInformationKind von Device gekoppelt ist, werden alle Objekte aufgelistet, die nicht über einen System.Devices.IpAddress-Eigenschaftensatz verfügen. =[] entspricht COP_EQUALS in Kombination mit dem Wert NULL.

System.Devices.IpAddress:=[]

Siehe auch