Criar um seletor de dispositivo

Um seletor de dispositivo permite limitar os dispositivos a serem pesquisados ao enumerar dispositivos, o que ajuda você a obter resultados mais relevantes e melhorar o desempenho do sistema.

Na maioria dos cenários, você obtém um seletor de dispositivo de uma pilha de dispositivos. Por exemplo, você pode usar GetDeviceSelector para dispositivos descobertos por USB. Esses seletores de dispositivo retornam uma cadeia de caracteres AQS (Sintaxe de Consulta Avançada). Para obter mais detalhes sobre o formato AQS, consulte Usando a sintaxe de consulta avançada programaticamente.

APIs importantes

Compilando a cadeia de caracteres de filtro

Há alguns casos em que você precisa enumerar dispositivos e um seletor de dispositivo fornecido não está disponível para seu cenário. Um seletor de dispositivo é uma cadeia de caracteres de filtro do AQS que contém as informações a seguir. Antes de criar uma cadeia de caracteres de filtro, você precisa saber algumas das principais informações sobre os dispositivos que deseja enumerar.

  • O DeviceInformationKind dos dispositivos nos quais você está interessado. Para obter mais informações sobre como DeviceInformationKind afeta a enumeração de dispositivos, consulte Enumerar dispositivos.
  • Como criar uma cadeia de caracteres de filtro do AQS (explicado neste tópico).
  • As propriedades em que você está interessado. As propriedades disponíveis dependerão do DeviceInformationKind. Consulte as propriedades de informações do dispositivo para obter mais informações.
  • Os protocolos que você está consultando. Isso só será necessário se você estiver procurando dispositivos por uma rede sem fio ou com fio. Para obter mais informações sobre como fazer isso, consulte Enumerar dispositivos em uma rede.

Ao usar as APIs Windows.Devices.Enumeration, você frequentemente combina o seletor de dispositivo com o tipo de dispositivo de seu interesse. A lista disponível de tipos de dispositivo é definida pela enumeração DeviceInformationKind. Essa combinação de fatores ajuda a limitar os dispositivos disponíveis àqueles nos quais você tem interesse. Se você não especificar o DeviceInformationKind ou o método que está usando não fornecer um parâmetro DeviceInformationKind , o tipo padrão será DeviceInterface.

As APIs Windows.Devices.Enumeration usam sintaxe AQS canônica, mas nem todos os operadores são compatíveis. Para obter uma lista das propriedades que estão disponíveis ao construir sua cadeia de caracteres de filtro, consulte as propriedades de informações do dispositivo.

Caution

As propriedades personalizadas definidas usando o {GUID} PID formato não podem ser usadas ao construir sua cadeia de caracteres de filtro do AQS. Isso ocorre porque o tipo de propriedade é derivado do nome de propriedade conhecido.

A tabela a seguir lista os operadores do AQS e quais tipos de parâmetros eles dão suporte.

Operador Tipos com suporte
COP_EQUAL Cadeia de caracteres, booliano, GUID, UInt16, UInt32
COP_NOTEQUAL Cadeia de caracteres, booliano, GUID, UInt16, UInt32
COP_LESSTHAN UInt16, UInt32
COP_GREATERTHAN UInt16, UInt32
COP_LESSTHANOREQUAL UInt16, UInt32
COP_GREATERTHANOREQUAL UInt16, UInt32
COP_VALUE_CONTAINS Cadeia de caracteres, matriz de cadeia de caracteres, matriz booliana, matriz GUID, matriz UInt16, matriz UInt32
COP_VALUE_NOTCONTAINS Cadeia de caracteres, matriz de cadeia de caracteres, matriz booliana, matriz GUID, matriz UInt16, matriz UInt32
COP_VALUE_STARTSWITH String
COP_VALUE_ENDSWITH String
COP_DOSWILDCARDS Sem suporte
COP_WORD_EQUAL Sem suporte
COP_WORD_STARTSWITH Sem suporte
COP_APPLICATION_SPECIFIC Sem suporte

Você pode especificar NULL para COP_EQUAL ou COP_NOTEQUAL. Isso se traduz em uma propriedade sem valor ou que o valor não existe. No AQS, você especifica NULL usando colchetes vazios [].

Importante

Ao usar os operadores COP_VALUE_CONTAINS e COP_VALUE_NOTCONTAINS , eles se comportam de forma diferente com cadeias de caracteres e matrizes de cadeias de caracteres. No caso de uma cadeia de caracteres, o sistema executará uma pesquisa que não diferencia maiúsculas de minúsculas para ver se o dispositivo contém a cadeia de caracteres indicada como uma subcadeia de caracteres. No caso de uma matriz de cadeia de caracteres, as subcadeias de caracteres não são pesquisadas. Com a matriz de cadeia de caracteres, a matriz é pesquisada para ver se ela contém toda a cadeia de caracteres especificada. Não é possível pesquisar uma matriz de cadeia de caracteres para ver se os elementos na matriz contêm uma subcadeia de caracteres.

Se você não puder criar uma única cadeia de caracteres de filtro do AQS que definirá o escopo de seus resultados adequadamente, você poderá filtrar seus resultados depois de recebê-los. No entanto, recomendamos limitar ao máximo possível os resultados da cadeia de caracteres de filtro AQS inicial quando você a fornecer às APIs Windows.Devices.Enumeration. Isso ajudará a melhorar o desempenho do aplicativo.

Exemplos de cadeia de caracteres do AQS

Os exemplos a seguir demonstram como a sintaxe do AQS pode ser usada para limitar os dispositivos que você deseja enumerar. Todas essas cadeias de caracteres de filtro são emparelhadas com um DeviceInformationKind para criar um filtro completo. Se nenhum tipo for especificado, lembre-se de que o tipo padrão é DeviceInterface.

Quando esse filtro é emparelhado com um DeviceInformationKind de DeviceInterface, ele enumera todos os objetos que contêm a classe de interface captura de áudio e que estão habilitados no momento. = converte em COP_EQUALS.

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

Quando esse filtro é emparelhado com um DeviceInformationKind de Device, ele enumera todos os objetos que têm pelo menos uma ID de hardware do GenCdRom. ~~ traduz para COP_VALUE_CONTAINS.

System.Devices.HardwareIds:~~"GenCdRom"

Quando esse filtro é emparelhado com um DeviceInformationKind de DeviceContainer, ele enumera todos os objetos que têm um nome de modelo que contém a subcadeia de caracteres Microsoft. ~~ traduz para COP_VALUE_CONTAINS.

System.Devices.ModelName:~~"Microsoft"

Quando esse filtro é emparelhado com um DeviceInformationKind de DeviceInterface, ele enumera todos os objetos que têm um nome começando com a subcadeia de caracteres Microsoft. ~< traduz para COP_STARTSWITH.

System.ItemNameDisplay:~<"Microsoft"

Quando esse filtro é emparelhado com um DeviceInformationKind de Device, enumera todos os objetos que têm uma propriedade System.Devices.IpAddress definida. <>[] é traduzido como COP_NOTEQUALS combinado com um valor NULL.

System.Devices.IpAddress:<>[]

Quando esse filtro é emparelhado com um DeviceInformationKind de Device, ele enumera todos os objetos que não têm um conjunto de propriedades System.Devices.IpAddress. =[] é traduzido como COP_EQUALS combinado com um valor NULL.

System.Devices.IpAddress:=[]

Consulte Também