Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
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.
- Importerande API:Windows. Devices.Enumeration
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.
- DeviceInformationKind för de enheter som intresserar dig. Mer information om hur DeviceInformationKind påverkar uppräkning av enheter finns i Räkna upp enheter.
- Skapa en AQS-filtersträng (förklaras i det här avsnittet).
- Egenskaperna som du är intresserad av. Vilka egenskaper som är tillgängliga beror på DeviceInformationKind. Mer information finns i Egenskaper för enhetsinformation .
- De protokoll du frågar via. Detta behövs bara om du söker efter enheter via ett trådlöst eller kabelanslutet nätverk. Mer information om hur du gör detta finns i Räkna upp enheter via ett nätverk.
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
Windows developer