Skapa en enhetsväljare

Med en enhetsväljare kan du begränsa vilka enheter som ska sökas igenom när enheter räknas upp, vilket hjälper dig att få mer relevanta resultat och förbättra systemets prestanda.

I de flesta scenarier får du en enhetsväljare från en enhetsstack. Du kan till exempel använda GetDeviceSelector för enheter som identifieras via USB. Dessa enhetsväljare returnerar en AQS-sträng (Advanced Query Syntax). Mer information om AQS-formatet finns i Använda avancerad frågesyntax programmatiskt.

Skapa filtersträngen

Det finns vissa fall där du behöver räkna upp enheter och en angiven enhetsväljare inte är tillgänglig för ditt scenario. En enhetsväljare är en AQS-filtersträng som innehåller följande information. Innan du skapar en filtersträng måste du känna till några viktiga delar av informationen om de enheter som du vill räkna upp.

När du använder Windows. Devices.Enumeration API:er, kombinerar du ofta enhetsväljaren med den enhetstyp som du är intresserad av. Den tillgängliga listan över enhetstyper definieras av DeviceInformationKind uppräkning. Den här kombinationen av faktorer hjälper dig att begränsa de enheter som är tillgängliga för de som du är intresserad av. Om du inte anger DeviceInformationKind, eller om metoden du använder inte anger parametern DeviceInformationKind , är standardtypen DeviceInterface.

Windows. Devices.Enumeration API:er använder kanonisk AQS-syntax, men inte alla operatorer stöds. En lista över egenskaper som är tillgängliga när du skapar filtersträngen finns i Egenskaper för enhetsinformation.

Caution

Anpassade egenskaper som definieras med formatet {GUID} PID kan inte användas när du skapar AQS-filtersträngen. Det beror på att egenskapstypen härleds från det välkända egenskapsnamnet.

I följande tabell visas AQS-operatorerna och vilka typer av parametrar de stöder.

Operator Typer som stöds
COP_EQUAL Sträng, booleskt, GUID, UInt16, UInt32
COP_NOTEQUAL Sträng, booleskt, GUID, UInt16, UInt32
COP_LESSTHAN UInt16, UInt32
COP_GREATERTHAN UInt16, UInt32
COP_LESSTHANOREQUAL UInt16, UInt32
COP_GREATERTHANOREQUAL UInt16, UInt32
COP_VALUE_CONTAINS Sträng, strängmatris, boolesk matris, GUID-matris, UInt16-matris, UInt32-matris
COP_VALUE_NOTCONTAINS Sträng, strängmatris, boolesk matris, GUID-matris, UInt16-matris, UInt32-matris
COP_VALUE_STARTSWITH String
COP_VALUE_ENDSWITH String
COP_DOSWILDCARDS Stöds ej
COP_WORD_EQUAL Stöds ej
COP_WORD_STARTSWITH Stöds ej
COP_APPLICATION_SPECIFIC Stöds ej

Du kan ange NULL för COP_EQUAL eller COP_NOTEQUAL. Detta översätts till en egenskap utan värde eller att värdet inte finns. I AQS anger du NULL med hjälp av tomma hakparenteser [].

Important

När du använder operatorerna COP_VALUE_CONTAINS och COP_VALUE_NOTCONTAINS beter de sig annorlunda med strängar och strängmatriser. När det gäller en sträng utför systemet en skiftlägeskänslig sökning för att se om enheten innehåller den angivna strängen som en understräng. När det gäller en strängmatris genomsöks inte understrängar. Med strängmatrisen genomsöks matrisen för att se om den innehåller hela den angivna strängen. Det går inte att söka i en strängmatris för att se om elementen i matrisen innehåller en delsträng.

Om du inte kan skapa en enda AQS-filtersträng som omfångsbegränsar dina resultat på rätt sätt kan du filtrera resultatet när du har fått dem. Vi rekommenderar dock att du begränsar resultatet från din första AQS-filtersträng så mycket som möjligt när du anger den till Windows. Devices.Enumeration API:er. På så sätt kan du förbättra programmets prestanda.

Exempel på AQS-strängar

Följande exempel visar hur AQS-syntaxen kan användas för att begränsa de enheter som du vill räkna upp. Alla dessa filtersträngar paras ihop med en EnhetInformationKind för att skapa ett fullständigt filter. Om ingen typ har angetts ska du komma ihåg att standardtypen är DeviceInterface.

När det här filtret paras ihop med en DeviceInformationKind av DeviceInterface räknas alla objekt som innehåller klassen Audio Capture-gränssnitt upp och som är aktiverade för närvarande. = översätts till COP_EQUALS.

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

När det här filtret paras ihop med en DeviceInformationKind av Enhet räknas alla objekt upp som har minst ett maskinvaru-ID för GenCdRom. ~~ översätts till COP_VALUE_CONTAINS.

System.Devices.HardwareIds:~~"GenCdRom"

När det här filtret används tillsammans med DeviceInformationKind med värdet DeviceContainer returneras alla objekt som har ett modellnamn som innehåller delsträngen Microsoft. ~~ översätts till COP_VALUE_CONTAINS.

System.Devices.ModelName:~~"Microsoft"

När det här filtret är kopplat till en DeviceInformationKind av DeviceInterface räknas alla objekt som har ett namn som börjar med Microsoft. ~< översätts till COP_STARTSWITH.

System.ItemNameDisplay:~<"Microsoft"

När det här filtret är kopplat till en DeviceInformationKind av Enhet räknas alla objekt som har en System.Devices.IpAddress egenskapsuppsättning. <>[] översätts till COP_NOTEQUALS kombinerat med ett NULL-värde .

System.Devices.IpAddress:<>[]

När det här filtret är kopplat till en DeviceInformationKind av Enhet räknas alla objekt som inte har en System.Devices.IpAddress egenskapsuppsättning. =[] översätts till COP_EQUALS kombinerat med ett NULL-värde .

System.Devices.IpAddress:=[]

Se även