Создание средства выбора устройств

Селектор устройств позволяет ограничить поиск устройств при перечислении устройств, что помогает получить более релевантные результаты и повысить производительность системы.

В большинстве случаев вы получаете средство выбора устройств из его стека. Например, для устройств, которые обнаруживаются по USB, можно использовать команду GetDeviceSelector. Эти средства выбора устройств возвращают строку расширенного синтаксиса запросов (AQS). Дополнительные сведения о формате AQS см. в разделе Использование расширенного синтаксиса запросов программным способом.

Важные API

Формирование строки фильтра

В ряде случаев предоставленное средство выбора устройств недоступно для сценария, когда требуется перечислить устройства. Средство выбора устройств — это строка фильтра AQS, которая содержит следующие сведения. Прежде чем создать строку фильтрации, необходимо знать некоторые ключевые сведения об устройствах, которые вы хотите перечислить.

При использовании API Windows.Devices.Enumeration средство выбора устройств часто объединяется с нужным типом устройства. Доступный список типов устройств определяется перечислением DeviceInformationKind. Такое сочетание факторов позволяет ограничить доступные устройства нужными вам устройствами. Если перечисление DeviceInformationKind не указано или используемый вами метод не предоставляет параметр DeviceInformationKind, по умолчанию используется тип DeviceInterface.

API Windows.Devices.Enumeration используют канонический синтаксис AQS, но не все операторы поддерживаются. Список доступных при построении строки фильтра свойств см. в разделе Свойства сведений об устройстве.

Внимание!

Пользовательские свойства, определенные с помощью {GUID} PID формата , нельзя использовать при создании строки фильтра AQS. Это вызвано тем, что данный тип свойства образован на основе имени известного свойства.

В таблице ниже перечислены операторы AQS и типы параметров, которые они поддерживают.

Оператор Поддерживаемые типы
COP_EQUAL Строковый, логический, GUID, UInt16, UInt32
COP_NOTEQUAL Строковый, логический, GUID, UInt16, UInt32
COP_LESSTHAN UInt16, UInt32
COP_GREATERTHAN UInt16, UInt32
COP_LESSTHANOREQUAL UInt16, UInt32
COP_GREATERTHANOREQUAL UInt16, UInt32
COP_VALUE_CONTAINS Строковый, строковый массив, логический массив, массив GUID, массив UInt16, массив UInt32
COP_VALUE_NOTCONTAINS Строковый, строковый массив, логический массив, массив GUID, массив UInt16, массив UInt32
COP_VALUE_STARTSWITH Строка
COP_VALUE_ENDSWITH Строка
COP_DOSWILDCARDS Не поддерживается
COP_WORD_EQUAL Не поддерживается
COP_WORD_STARTSWITH Не поддерживается
COP_APPLICATION_SPECIFIC Не поддерживается

Для COP_EQUAL или COP_NOTEQUAL можно указать значение NULL. Это означает свойство без значения или несуществующее значение. В AQS значение NULL указывается с помощью пустых квадратных скобок [].

Важно!

При использовании операторов COP_VALUE_CONTAINS и COP_VALUE_NOTCONTAINS они ведут себя по-разному со строками и массивами строк. В случае со строками система выполняет поиск без учета регистра, чтобы определить, содержит ли устройство указанную строку в качестве подстроки. В случае со строковыми массивами поиск по подстрокам не выполняется. В таком случае поиск выполняется по массиву, чтобы определить, содержит ли он указанную строку полностью. Выполнить поиск массива строк, чтобы определить, содержат ли элементы массива подстроку, невозможно.

Если вы не можете создать одну строку фильтра AQS, которая будет определять область результатов соответствующим образом, вы можете отфильтровать результаты после их получения. Однако мы рекомендуем максимально ограничить результаты из исходной строки фильтра AQS при ее предоставлении в API Windows.Devices.Enumeration . Это повысит производительность вашего приложения.

Примеры строк AQS

В следующих примерах показано, как можно использовать синтаксис AQS для ограничения количества устройств, которые нужно перечислить. Все эти строки фильтров используются вместе с DeviceInformationKind, чтобы создать полный фильтр. Помните, что если тип не указан, по умолчанию используется тип DeviceInterface.

Когда этот фильтр используется с типом DeviceInformationKind объекта DeviceInterface, он перечисляет все объекты, которые сейчас включены и в которых содержится класс интерфейса Audio Capture. = преобразуется в COP_EQUALS.

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

Когда этот фильтр используется с типом DeviceInformationKind объекта Device, он перечисляет все объекты, в которых имеется не менее одного аппаратного идентификатора GenCdRom. ~~ преобразуется в COP_VALUE_CONTAINS.

System.Devices.HardwareIds:~~"GenCdRom"

Когда этот фильтр используется с типом DeviceInformationKind объекта DeviceContainer, он перечисляет все объекты с названием модели с подстрокой Microsoft. ~~ преобразуется в COP_VALUE_CONTAINS.

System.Devices.ModelName:~~"Microsoft"

Когда этот фильтр используется с типом DeviceInformationKind объекта DeviceInterface, он перечисляет все объекты с названием модели, которое начинается с подстроки Microsoft. ~< преобразуется в COP_STARTSWITH.

System.ItemNameDisplay:~<"Microsoft"

Когда этот фильтр используется с типом DeviceInformationKind объекта Device, он перечисляет все объекты, для которых задан параметр System.Devices.IpAddress. <>[] преобразуется в COP_NOTEQUALS в сочетании со значением NULL .

System.Devices.IpAddress:<>[]

Когда этот фильтр используется с типом DeviceInformationKind объекта Device, он перечисляет все объекты, для которых не задан параметр System.Devices.IpAddress. =[] преобразуется в COP_EQUALS в сочетании со значением NULL .

System.Devices.IpAddress:=[]

См. также: