Compartilhar via


Criar um seletor de dispositivo

Um seletor de dispositivo permite limitar os dispositivos a serem pesquisados ao enumerar dispositivos, o que ajuda 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

Construindo 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 informações importantes 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 AQS (explicado neste tópico).
  • As propriedades em que você está interessado. As propriedades disponíveis dependerão do DeviceInformationKind. Consulte Propriedades de informações do dispositivo para obter mais informações.
  • Os protocolos que você está consultando. Isso só é necessário se você estiver procurando dispositivos em 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 no qual está interessado. 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 em que você está interessado. Se você não especificar o DeviceInformationKind ou o método que você está usando não fornecer um parâmetro DeviceInformationKind , o tipo padrão será DeviceInterface.

As APIs Windows.Devices.Enumeration usam a sintaxe AQS canônica, mas nem todos os operadores têm suporte. Para obter uma lista de propriedades que estão disponíveis quando você está construindo sua cadeia de caracteres de filtro, consulte Propriedades de informações do dispositivo.

Cuidado

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

A tabela a seguir lista os operadores AQS e quais tipos de parâmetros eles suportam.

Operador Tipos com suporte
COP_EQUAL Cadeia de caracteres, booleano, GUID, UInt16, UInt32
COP_NOTEQUAL Cadeia de caracteres, booleano, 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 booleana, matriz GUID, matriz UInt16, matriz UInt32
COP_VALUE_NOTCONTAINS Cadeia de caracteres, matriz de cadeia de caracteres, matriz booleana, 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 maneira diferente com cadeias de caracteres e matrizes de cadeia de caracteres. No caso de uma cadeia de caracteres, o sistema executará uma pesquisa sem distinção entre maiúsculas e 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 strings, as substrings não são pesquisadas. Com a matriz de cadeia de caracteres, a matriz é pesquisada para ver se 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 AQS que defina o escopo de seus resultados adequadamente, poderá filtrar seus resultados depois de recebê-los. No entanto, recomendamos limitar os resultados da cadeia de caracteres de filtro AQS inicial o máximo possível ao 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 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 de Captura de Áudio e que estão habilitados no momento. = se traduz 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 de GenCdRom. ~~ se traduz em 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. ~~ se traduz em 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 que começa com a subcadeia de caracteres Microsoft. <~ se traduz em COP_STARTSWITH.

System.ItemNameDisplay:~<"Microsoft"

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

System.Devices.IpAddress:=[]

Confira também