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 das situações, você obtém um seletor de dispositivo de uma pilha de dispositivo. Por exemplo, você pode usar GetDeviceSelector para dispositivos descobertos por USB. Esses seletores de dispositivo retornam uma cadeia de caracteres de Sintaxe de Consulta Avançada (AQS). Para obter mais detalhes sobre o formato AQS, consulte Usando a sintaxe de consulta avançada programaticamente.

APIs importantes

Criando 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 AQS que contém as informações a seguir. Antes de criar uma cadeia de caracteres de filtro, você precisa saber algumas partes importantes de informações sobre os dispositivos que você deseja enumerar.

  • O DeviceInformationKind dos dispositivos em que você está interessado. Para saber mais sobre como o DeviceInformationKind impacta a enumeração de dispositivos, consulte Enumerate devices.
  • Como criar uma cadeia de caracteres de filtro do AQS (explicada neste tópico).
  • As propriedades em que você está interessado. As propriedades disponíveis dependerão do DeviceInformationKind. Consulte Device information properties para obter mais informações.
  • Os protocolos que você está consultando. Isso só é necessário quando você está procurando dispositivos por uma rede com ou sem fio. Para saber mais sobre como fazer isso, consulte Enumerate devices over a network.

Ao usar as APIs Windows.Devices.Enumeration, você frequentemente combinará o seletor de dispositivo com o tipo de dispositivo em que você está interessado. A lista disponível de tipos de dispositivo é definida pela enumeração DeviceInformationKind. Essa combinação de fatores ajuda você a limitar os dispositivos que estão disponíveis para aqueles em que você está interessado. Se você não especificar o DeviceInformationKind ou se o método que você está usando não oferecer um parâmetro DeviceInformationKind, o tipo padrão será DeviceInterface.

As APIs Windows.Devices.Enumeration usam sintaxe AQS Canonical, mas nem todos os operadores são suportados. Para obter uma lista de propriedades que estão disponíveis quando você constrói sua cadeia de caracteres de filtro, consulte Device information properties.

Cuidado

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

A tabela a seguir lista os operadores AQS e os tipos de parâmetros a que 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 cujo 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 fará uma pesquisa sem diferenciação de 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 a cadeia de caracteres especificada inteira. Não é possível pesquisar uma matriz de cadeia de caracteres para verificar se os elementos na matriz contém uma subcadeia de caracteres.

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

Exemplos de cadeia de caracteres AQS

Os exemplos a seguir demonstram como a sintaxe AQS pode ser usada para limitar dispositivos que você quer 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 da interface de Captura de Áudio e os 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 um ID de hardware do GenCdRom. ~~ converte em COP_VALUE_CONTAINS.

System.Devices.HardwareIds:~~"GenCdRom"

Quando esse filtro é emparelhado com um DeviceInformationKind de DeviceContainer, ele enumera todos os objetos que tem um nome de modelo contendo a subcadeia de caracteres da Microsoft. ~~ converte em COP_VALUE_CONTAINS.

System.Devices.ModelName:~~"Microsoft"

Quando esse filtro é emparelhado com um DeviceInformationKind de DeviceInterface, ele enumera todos os objetos que tem um nome que começa com a subcadeia de caracteres da Microsoft. ~< converte em COP_STARTSWITH.

System.ItemNameDisplay:~<"Microsoft"

Quando esse filtro é emparelhado com um DeviceInformationKind de Device, ele enumera todos os objetos que têm um conjunto de propriedade System.Devices.IpAddress. <>[] converte em 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 propriedade System.Devices.IpAddress. =[] converte em COP_EQUALS combinado com um valor NULL .

System.Devices.IpAddress:=[]

Consulte Também