Compartir a través de


Crear un selector de dispositivos

Un selector de dispositivos permite limitar los dispositivos a buscar al enumerar dispositivos, lo que le ayuda a obtener resultados más relevantes y a mejorar el rendimiento del sistema.

En la mayoría de los escenarios, obtienes un selector de dispositivos de una pila de dispositivos. Por ejemplo, puedes usar GetDeviceSelector para los dispositivos detectados a través de USB. Estos selectores de dispositivos devuelven una cadena de sintaxis de consulta avanzada (AQS). Para obtener más información sobre el formato AQS, consulte Uso de la sintaxis de consulta avanzada mediante programación.

API importantes

Crear la cadena de filtro

Existen algunos casos en los que necesitarás enumerar dispositivos y no habrá ningún selector de dispositivos disponible para tu escenario. Un selector de dispositivos es una cadena de filtro AQS que contiene la siguiente información. Antes de crear una cadena de filtro, debes conocer algunas partes clave de información sobre los dispositivos que quieres enumerar.

Al usar la API Windows.Devices.Enumeration, a menudo combinas el selector de dispositivos con el tipo de dispositivo que te interesa. La lista disponible de tipos de dispositivos se define mediante la enumeración DeviceInformationKind. Esta combinación de factores te ayuda a filtrar los dispositivos que te interesan de los que están disponibles. Si no se especifica DeviceInformationKind o el método que se va a usar no proporciona ningún parámetro DeviceInformationKind, el tipo predeterminado será DeviceInterface.

La API Windows.Devices.Enumeration usa la sintaxis AQS canónica, pero no se admiten todos los operadores. Para obtener una lista de propiedades que están disponibles cuando se construye la cadena de filtro, consulta Propiedades de información de dispositivo.

Precaución

Las propiedades personalizadas definidas mediante el {GUID} PID formato no se pueden usar al construir la cadena de filtro de AQS. Esto se debe a que el tipo de propiedad se deriva del nombre de propiedad conocido.

En la siguiente tabla se muestran los operadores AQS y los tipos de parámetros que admiten.

Operador Tipos admitidos
COP_EQUAL Cadena, booleano, GUID, UInt16, UInt32
COP_NOTEQUAL Cadena, booleano, GUID, UInt16, UInt32
COP_LESSTHAN UInt16, UInt32
COP_GREATERTHAN UInt16, UInt32
COP_LESSTHANOREQUAL UInt16, UInt32
COP_GREATERTHANOREQUAL UInt16, UInt32
COP_VALUE_CONTAINS Cadena, matriz de cadena, matriz booleana, matriz GUID, matriz UInt16, UInt32 matriz
COP_VALUE_NOTCONTAINS Cadena, matriz de cadena, matriz booleana, matriz GUID, matriz UInt16, UInt32 matriz
COP_VALUE_STARTSWITH String
COP_VALUE_ENDSWITH String
COP_DOSWILDCARDS No compatible
COP_WORD_EQUAL No compatible
COP_WORD_STARTSWITH No compatible
COP_APPLICATION_SPECIFIC No compatible

Puede especificar NULL para COP_EQUAL o COP_NOTEQUAL. Esto se traduce en una propiedad sin ningún valor o en que el valor no existe. En AQS, especifique NULL mediante corchetes vacíos [].

Importante

Al usar los operadores COP_VALUE_CONTAINS y COP_VALUE_NOTCONTAINS , se comportan de forma diferente con cadenas y matrices de cadenas. En el caso de las cadenas, el sistema realizará una búsqueda sin distinguir entre mayúsculas y minúsculas para ver si el dispositivo contiene la cadena indicada como subcadena. En el caso de las matrices de cadenas, no se buscan las subcadenas. Con la matriz de cadenas, la matriz se busca para ver si contiene toda la cadena especificada. No es posible buscar una matriz de cadena para ver si los elementos de la matriz contienen una subcadena.

Si no se puedes crear una única cadena de filtro AQS que defina el ámbito de los resultados de forma adecuada, puedes filtrar los resultados después de recibirlos. Sin embargo, se recomienda limitar los resultados de la cadena de filtro de AQS inicial tanto como sea posible cuando se proporciona a las API Windows.Devices.Enumeration . Esto ayudará a mejorar el rendimiento de la aplicación.

Ejemplos de cadena AQS

En los siguientes ejemplos se muestra cómo se puede usar la sintaxis AQS para limitar los dispositivos que deseas enumerar. Todas estas cadenas de filtro se emparejan con DeviceInformationKind para crear un filtro completo. Si no se especifica ningún tipo, recuerda que el tipo predeterminado es DeviceInterface.

Cuando este filtro está emparejado con una enumeración DeviceInformationKind de DeviceInterface, se enumeran todos los objetos que contienen la clase de interfaz de captura de audio y que están actualmente habilitados. = se traduce en COP_EQUALS.

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

Cuando este filtro está emparejado con una enumeración DeviceInformationKind de Device, se enumeran todos los objetos que tienen al menos un identificador de hardware de GenCdRom. ~~ se traduce en COP_VALUE_CONTAINS.

System.Devices.HardwareIds:~~"GenCdRom"

Cuando este filtro está emparejado con una enumeración DeviceInformationKind de DeviceContainer, se enumeran todos los objetos que tienen un nombre de modelo que contiene la subcadena Microsoft. ~~ se traduce en COP_VALUE_CONTAINS.

System.Devices.ModelName:~~"Microsoft"

Cuando este filtro está emparejado con una enumeración DeviceInformationKind de DeviceInterface, se enumeran todos los objetos que tienen un nombre que comienza por la subcadena Microsoft. ~< se traduce en COP_STARTSWITH.

System.ItemNameDisplay:~<"Microsoft"

Cuando este filtro está emparejado con una enumeración DeviceInformationKind de Device, se enumeran todos los objetos que tienen un conjunto de propiedades System.Devices.IpAddress. <>[] se traduce en COP_NOTEQUALS combinado con un valor NULL .

System.Devices.IpAddress:<>[]

Cuando este filtro está emparejado con una enumeración DeviceInformationKind de Device, se enumeran todos los objetos que no tienen un conjunto de propiedades System.Devices.IpAddress. =[] se traduce en COP_EQUALS combinado con un valor NULL .

System.Devices.IpAddress:=[]

Consulte también