Een apparaatkiezer bouwen

Met een apparaatkiezer kunt u de apparaten beperken om door te zoeken bij het inventariseren van apparaten, zodat u relevantere resultaten krijgt en de prestaties van het systeem kunt verbeteren.

In de meeste scenario's krijgt u een apparaatkiezer uit een apparaatstack. U kunt bijvoorbeeld GetDeviceSelector gebruiken voor apparaten die via USB zijn gedetecteerd. Deze apparaatkiezers retourneren een AQS-tekenreeks (Advanced Query Syntax). Zie Geavanceerde querysyntaxis programmatisch gebruiken voor meer informatie over de AQS-indeling.

De filterreeks opbouwen

Er zijn enkele gevallen waarin u apparaten moet inventariseren en een opgegeven apparaatkiezer niet beschikbaar is voor uw scenario. Een apparaatkiezer is een AQS-filtertekenreeks die de volgende informatie bevat. Voordat u een filtertekenreeks maakt, moet u enkele belangrijke onderdelen van informatie weten over de apparaten die u wilt inventariseren.

Wanneer u de Windows gebruikt. Devices.Enumeration-API's combineert u vaak de apparaatkiezer met het apparaattype waarin u geïnteresseerd bent. De beschikbare lijst met apparaattypen wordt gedefinieerd door de opsomming DeviceInformationKind. Deze combinatie van factoren helpt u de beschikbare apparaten te beperken tot de apparaten waarin u geïnteresseerd bent. Als u het DeviceInformationKind niet opgeeft of als de methode die u gebruikt geen DeviceInformationKind-parameter biedt, is het standaardtype DeviceInterface.

De Windows. Devices.Enumeration API's maken gebruik van canonieke AQS-syntaxis, maar niet alle operators worden ondersteund. Zie Eigenschappen van apparaatgegevens voor een lijst met eigenschappen die beschikbaar zijn wanneer u uw filtertekenreeks opstelt.

Caution

Aangepaste eigenschappen die zijn gedefinieerd met behulp van de indeling {GUID} PID kunnen niet worden gebruikt bij het opstellen van uw AQS-filterreeks. Dit komt doordat het eigenschapstype is afgeleid van de bekende eigenschapsnaam.

De volgende tabel bevat de AQS-operators en welke typen parameters ze ondersteunen.

Operator Ondersteunde typen
COP_EQUAL tekenreeks, Booleaans, GUID, UInt16, UInt32
COP_NOTEQUAL tekenreeks, Booleaans, GUID, UInt16, UInt32
COP_LESSTHAN UInt16, UInt32
COP_GREATERTHAN UInt16, UInt32
COP_LESSTHANOREQUAL UInt16, UInt32
COP_GREATERTHANOREQUAL UInt16, UInt32
COP_VALUE_CONTAINS Tekenreeks, tekenreeksmatrix, Booleaanse matrix, GUID-matrix, UInt16-matrix, UInt32-matrix
COP_VALUE_NOTCONTAINS Tekenreeks, tekenreeksmatrix, Booleaanse matrix, GUID-matrix, UInt16-matrix, UInt32-matrix
COP_VALUE_STARTSWITH String
COP_VALUE_ENDSWITH String
COP_DOSWILDCARDS Niet ondersteund
COP_WORD_EQUAL Niet ondersteund
COP_WORD_STARTSWITH Niet ondersteund
COP_APPLICATION_SPECIFIC Niet ondersteund

U kunt NULL opgeven voor COP_EQUAL of COP_NOTEQUAL. Dit wordt omgezet in een eigenschap zonder waarde of dat de waarde niet bestaat. In AQS geeft u NULL op met lege vierkante haken [].

Important

Wanneer u de operators COP_VALUE_CONTAINS en COP_VALUE_NOTCONTAINS gebruikt, gedragen ze zich anders met tekenreeksen en tekenreeksmatrices. In het geval van een tekenreeks voert het systeem een niet-hoofdlettergevoelige zoekopdracht uit om te zien of het apparaat de aangegeven tekenreeks bevat als een subtekenreeks. In het geval van een tekenreeksmatrix worden subtekenreeksen niet doorzocht. Met de tekenreeksmatrix wordt de matrix doorzocht om te zien of deze de volledige opgegeven tekenreeks bevat. Het is niet mogelijk om een tekenreeksmatrix te doorzoeken om te zien of de elementen in de matrix een subtekenreeks bevatten.

Als u niet één AQS-filtertekenreeks kunt maken waarmee uw resultaten correct worden afgebakend, kunt u uw resultaten filteren nadat u ze hebt ontvangen. We raden u echter aan de resultaten van de eerste AQS-filtertekenreeks zoveel mogelijk te beperken wanneer u deze opgeeft aan de Windows. Devices.Enumeration API's. Dit helpt de prestaties van uw toepassing te verbeteren.

Voorbeelden van AQS-tekenreeksen

In de volgende voorbeelden ziet u hoe de syntaxis van AQS kan worden gebruikt om de apparaten te beperken die u wilt inventariseren. Al deze filtertekenreeksen zijn gekoppeld aan een DeviceInformationKind om een volledig filter te maken. Als er geen soort is opgegeven, moet u er rekening mee houden dat het standaardtype DeviceInterface is.

Wanneer dit filter is gekoppeld aan een DeviceInformationKind van DeviceInterface, worden alle objecten opgesomd die de interfaceklasse Audio Capture bevatten en die momenteel zijn ingeschakeld. = wordt omgezet in COP_EQUALS.

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

Wanneer dit filter is gekoppeld aan een DeviceInformationKind van Device, worden alle objecten met ten minste één hardware-id van GenCdRom opgesomd. ~~ wordt omgezet in COP_VALUE_CONTAINS.

System.Devices.HardwareIds:~~"GenCdRom"

Wanneer dit filter is gekoppeld aan een DeviceInformationKind van DeviceContainer, worden alle objecten met een modelnaam met de subtekenreeks Microsoft opgesomd. ~~ wordt omgezet in COP_VALUE_CONTAINS.

System.Devices.ModelName:~~"Microsoft"

Wanneer dit filter is gekoppeld aan een DeviceInformationKind van DeviceInterface, worden alle objecten opgesomd die een naam hebben die begint met de subtekenreeks Microsoft. ~< wordt omgezet in COP_STARTSWITH.

System.ItemNameDisplay:~<"Microsoft"

Wanneer dit filter wordt gecombineerd met een DeviceInformationKind van Device, worden alle objecten opgesomd waarvoor de eigenschap System.Devices.IpAddress is ingesteld. <>[] wordt omgezet in COP_NOTEQUALS gecombineerd met een NULL-waarde .

System.Devices.IpAddress:<>[]

Wanneer dit filter is gekoppeld aan een DeviceInformationKind van Device, worden alle objecten opgesomd die geen System.Devices.IpAddress eigenschap ingesteld hebben. =[] wordt omgezet in COP_EQUALS gecombineerd met een NULL-waarde .

System.Devices.IpAddress:=[]

Zie ook