Criar um seletor de dispositivo

Um seletor de dispositivos permite-lhe limitar os dispositivos a explorar ao enumerar dispositivos, o que ajuda a obter resultados mais relevantes e a melhorar o desempenho do sistema.

Na maioria das situações, obtém um seletor de dispositivos a partir de uma stack de dispositivos. Por exemplo, pode usar o GetDeviceSelector para dispositivos descobertos via USB. Estes seletores de dispositivos devolvem uma cadeia de caracteres de Sintaxe Avançada de Consulta (AQS). Para mais detalhes sobre o formato AQS, consulte Utilizar a Sintaxe de Consulta Avançada programaticamente.

Construir a cadeia de filtros

Existem casos em que precisa de enumerar dispositivos e um seletor de dispositivos fornecido não está disponível para o seu caso. Um seletor de dispositivo é uma cadeia de filtro AQS que contém a seguinte informação. Antes de criar uma cadeia de filtros, precisa de conhecer algumas informações-chave sobre os dispositivos que pretende enumerar.

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

As APIs Windows.Devices.Enumeration usam a sintaxe AQS canónica, mas nem todos os operadores são suportados. Para uma lista de propriedades disponíveis quando está a construir a sua cadeia de filtro, consulte Propriedades de informação do dispositivo.

Atenção

Propriedades personalizadas definidas usando o {GUID} PID formato não podem ser usadas ao construir a sua cadeia de filtro AQS. Isto deve-se ao facto de o tipo de propriedade derivar do nome bem conhecido da propriedade.

A tabela seguinte lista os operadores AQS e os tipos de parâmetros que suportam.

Operador Tipos suportados
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 String, matriz de strings, matriz de booleanos, matriz de GUID, matriz de UInt16, matriz de UInt32
COP_VALUE_NOTCONTAINS String, matriz de strings, matriz de booleanos, matriz de GUID, matriz de UInt16, matriz de UInt32
COP_VALUE_STARTSWITH String
COP_VALUE_ENDSWITH String
COP_DOSWILDCARDS Não suportado
COP_WORD_EQUAL Não suportado
COP_WORD_STARTSWITH Não suportado
COP_APPLICATION_SPECIFIC Não suportado

Podes especificar NULL para COP_EQUAL ou COP_NOTEQUAL. Isto traduz-se numa propriedade sem valor, ou que o valor não existe. No AQS, especifica NULL usando colchetes vazios [].

Importante

Ao utilizar os operadores COP_VALUE_CONTAINS e COP_VALUE_NOTCONTAINS, estes comportam-se de forma diferente com cadeias de caracteres e arrays de cadeias de caracteres. No caso de uma cadeia de caracteres, o sistema efetuará uma pesquisa sem distinção entre maiúsculas e minúsculas para verificar se o dispositivo contém a cadeia de caracteres indicada como subcadeia. No caso de um array de cadeias, as substrings não são pesquisadas. Com o array de strings, o array é pesquisado para ver se contém toda a string especificada. Não é possível pesquisar num array de cadeias para ver se os elementos do array contêm uma substring.

Se não conseguir criar uma única cadeia de filtro AQS que defina adequadamente os seus resultados, pode filtrar os resultados depois de os receber. No entanto, recomendamos que limite ao máximo os resultados da sua cadeia de filtro AQS inicial ao fornecê-la às APIs Windows.Devices.Enumeration. Isto ajudará a melhorar o desempenho da sua aplicação.

Exemplos de cadeias de caracteres AQS

Os exemplos seguintes demonstram como a sintaxe AQS pode ser usada para limitar os dispositivos que pretende enumerar. Todas estas cadeias de filtro são emparelhadas com um DeviceInformationKind para criar um filtro completo. Se não for especificado nenhum tipo, lembre-se que o tipo padrão é DeviceInterface.

Quando este filtro é emparelhado com um DeviceInformationKind de DeviceInterface, enumera todos os objetos que contêm a classe de interface de Captura de Áudio e que estão atualmente ativados. = corresponde a COP_EQUALS.

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

Quando este filtro é emparelhado com um DeviceInformationKind de Device, enumera todos os objetos que têm pelo menos um ID de hardware do GenCdRom. ~~ traduz-se por COP_VALUE_CONTAINS.

System.Devices.HardwareIds:~~"GenCdRom"

Quando este filtro é emparelhado com um DeviceInformationKind de DeviceContainer, enumera todos os objetos que tenham um nome de modelo contendo a substring Microsoft. ~~ traduz-se por COP_VALUE_CONTAINS.

System.Devices.ModelName:~~"Microsoft"

Quando este filtro é emparelhado com um DeviceInformationKind de DeviceInterface, enumera todos os objetos que têm um nome que começa pela substring Microsoft. ~< traduz-se por COP_STARTSWITH.

System.ItemNameDisplay:~<"Microsoft"

Quando este filtro é emparelhado com um DeviceInformationKind de Device, enumera todos os objetos que têm um conjunto de propriedades System.Devices.IpAddress. <>[] traduz-se em COP_NOTEQUALS combinado com um valor NULL .

System.Devices.IpAddress:<>[]

Quando este filtro é emparelhado com um DeviceInformationKind de Device, enumera todos os objetos que não têm um conjunto de propriedades System.Devices.IpAddress. =[] traduz-se em COP_EQUALS combinado com um valor NULL .

System.Devices.IpAddress:=[]

Ver também