Erstellen einer Geräteauswahl
Mit einer Geräteauswahl können Sie die Geräte so einschränken, dass sie beim Aufzählen von Geräten durchsucht werden, wodurch Sie relevantere Ergebnisse erhalten und die Leistung des Systems verbessern können.
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.
Wichtige APIs
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.
- DeviceInformationKind der Geräte, an denen Sie interessiert sind. 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-Element ab. Weitere Informationen finden Sie unter Geräteinformationseigenschaften .
- Die Protokolle, die Sie abfragen. 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 der Windows.Devices.Enumeration-APIs kombinieren Sie die Geräteauswahl häufig mit der Geräteart, an der Sie interessiert sind. Die verfügbare Liste der Gerätetypen wird durch die DeviceInformationKind-Aufzählung 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.
Achtung
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.
Operator | 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, Zeichenfolgenarray, boolesches Array, GUID-Array, UInt16-Array, UInt32-Array |
COP_VALUE_NOTCONTAINS | Zeichenfolge, Zeichenfolgenarray, boolesches Array, 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.
Wichtig
Bei Verwendung der operatoren COP_VALUE_CONTAINS und COP_VALUE_NOTCONTAINS verhalten sie sich mit Zeichenfolgen und Zeichenfolgenarrays anders. Bei einer Zeichenfolge führt das System eine Suche ohne Groß-/Kleinschreibung durch, um festzustellen, ob das Gerät die angegebene Zeichenfolge als Teilzeichenfolge enthält. Bei einem Zeichenfolgenarray werden Teilzeichenfolgen nicht durchsucht. 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. Es wird jedoch empfohlen, die Ergebnisse der ursprünglichen AQS-Filterzeichenfolge so weit wie möglich einzuschränken, wenn Sie sie den Windows.Devices.Enumeration-APIs bereitstellen. 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, listet er alle Objekte auf, die die AudioAufnahmeschnittstellenklasse 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-Gerät 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, listet er alle Objekte auf, die einen Modellnamen enthalten, der die Teilzeichenfolge Microsoft enthält. ~~ wird in COP_VALUE_CONTAINS übersetzt.
System.Devices.ModelName:~~"Microsoft"
Wenn dieser Filter mit einem DeviceInformationKind von DeviceInterface gekoppelt ist, listet er alle Objekte auf, die einen Namen haben, beginnend mit der Teilzeichenfolge Microsoft. ~< übersetzt in COP_STARTSWITH.
System.ItemNameDisplay:~<"Microsoft"
Wenn dieser Filter mit einem DeviceInformationKind-Gerät gekoppelt ist, listet er alle Objekte auf, die über eine System.Devices.IpAddress-Eigenschaft verfügen. <>[] wird in COP_NOTEQUALS in Kombination mit einem NULL-Wert übersetzt.
System.Devices.IpAddress:<>[]
Wenn dieser Filter mit einem DeviceInformationKind-Gerät gekoppelt ist, listet er alle Objekte auf, die nicht über eine System.Devices.IpAddress-Eigenschaft verfügen. =[] wird in COP_EQUALS in Kombination mit einem NULL-Wert übersetzt.
System.Devices.IpAddress:=[]