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 casos, se obtiene un selector de dispositivo de una pila de dispositivos. Por ejemplo, puede usar GetDeviceSelector para 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.

Creación de la cadena de filtro

Hay algunos casos en los que es necesario enumerar dispositivos y un selector de dispositivos proporcionado no está disponible para su escenario. Un selector de dispositivos es una cadena de filtro de AQS que contiene la siguiente información. Antes de crear una cadena de filtro, debe conocer algunos fragmentos clave de información sobre los dispositivos que desea enumerar.

Al usar el Windows. Devices.Enumeration API, con frecuencia combinas el selector de dispositivos con el tipo de dispositivo que te interesa. La lista disponible de tipos de dispositivo se define mediante la enumeración DeviceInformationKind. Esta combinación de factores le ayuda a limitar los dispositivos que están disponibles para los que le interesan. Si no especifica deviceInformationKind o el método que usa no proporciona un parámetro DeviceInformationKind , el tipo predeterminado es DeviceInterface.

Las API de Windows.Devices.Enumeration usan sintaxis AQS canónica, pero no todos los operadores son compatibles. Para obtener una lista de las propiedades que están disponibles al construir la cadena de filtro, consulte Propiedades de información del dispositivo.

Caution

Las propiedades personalizadas definidas con 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 tabla siguiente se enumeran los operadores de AQS y qué tipos de parámetros admiten.

Operador Tipos soportados
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 Cadena, matriz de cadenas, matriz de booleanos, matriz de GUID, matriz de UInt16, matriz de UInt32
COP_VALUE_NOTCONTAINS Cadena, matriz de cadenas, matriz de booleanos, matriz de GUID, matriz de UInt16, matriz de UInt32
COP_VALUE_STARTSWITH String
COP_VALUE_ENDSWITH String
COP_DOSWILDCARDS No soportado
COP_WORD_EQUAL No soportado
COP_WORD_STARTSWITH No soportado
COP_APPLICATION_SPECIFIC No soportado

Puede especificar NULL para COP_EQUAL o COP_NOTEQUAL. Esto se traduce en una propiedad sin ningún valor o 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 una cadena, el sistema realizará una búsqueda sin distinción entre mayúsculas y minúsculas para ver si el dispositivo contiene la cadena indicada como una subcadena. En el caso de una matriz de cadenas, no se buscan subcadenas. Con la matriz de cadenas, se busca la matriz para ver si contiene toda la cadena especificada. No es posible buscar una matriz de cadenas para ver si los elementos de la matriz contienen una subcadena.

Si no puede crear una sola cadena de filtro de AQS que limitará los resultados correctamente, puede filtrar los resultados después de recibirlos. Sin embargo, le recomendamos limitar al máximo los resultados de la cadena de filtro AQS inicial al proporcionarla a las API de Windows.Devices.Enumeration. Esto ayudará a mejorar el rendimiento de la aplicación.

Ejemplos de cadenas de AQS

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

Cuando este filtro está emparejado con un DeviceInformationKind de DeviceInterface, enumera todos los objetos que contienen la clase de interfaz Captura de audio y que están habilitados actualmente. = 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 un DeviceInformationKind de Device, enumera 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 se empareja con un DeviceInformationKind de DeviceContainer, enumera 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 se empareja con un DeviceInformationKind de DeviceInterface, enumera todos los objetos que tienen un nombre a partir de la subcadena Microsoft. ~< se traduce en COP_STARTSWITH.

System.ItemNameDisplay:~<"Microsoft"

Cuando este filtro está emparejado con un DeviceInformationKind de Device, enumera todos los objetos que tienen un System.Devices.IpAddress establecido. <>[] se traduce como COP_NOTEQUALS combinado con un valor NULL.

System.Devices.IpAddress:<>[]

Cuando este filtro está emparejado con un DeviceInformationKind de Device, enumera todos los objetos que no tienen un System.Devices.IpAddress establecido. =[] se traduce en COP_EQUALS combinado con un valor NULL .

System.Devices.IpAddress:=[]

Véase también