Создайте селектор устройств

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

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

Основные API

Создание строки фильтра

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

  • ВидИнформацииОбУстройстве для устройств, интересующих вас. Дополнительные сведения о том, как DeviceInformationKind влияет на перечисление устройств, см. в разделе "Перечисление устройств".
  • Как создать строку фильтра AQS (описано в этом разделе).
  • Интересующие вас свойства. Доступные свойства зависят от DeviceInformationKind. Для получения дополнительной информации см. свойства сведений об устройстве .
  • Протоколы, которые вы запрашиваете. Это необходимо только в том случае, если вы ищете устройства по беспроводной или проводной сети. Дополнительные сведения об этом см. в разделе "Перечисление устройств по сети".

При использовании API Windows.Devices.Enumeration, часто используется селектор устройств в сочетании с типом устройства, который вас интересует. Список доступных типов устройств определяется перечислением DeviceInformationKind . Это сочетание факторов помогает ограничить устройства до тех, которые вас интересуют. Если не указать DeviceInformationKind или используемый метод не предоставляет параметр DeviceInformationKind , тип по умолчанию — DeviceInterface.

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

Осторожность

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

В следующей таблице перечислены операторы AQS и типы поддерживаемых параметров.

Оператор Поддерживаемые типы
COP_EQUAL String, boolean, 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
ЗНАЧЕНИЕ_НЕ_СОДЕРЖИТСЯ Строка, строковый массив, логический массив, массив GUID, массив UInt16, массив UInt32
COP_VALUE_STARTSWITH Струна
COP_VALUE_ENDSWITH Струна
COP_DOSWILDCARDS Не поддерживается
COP_WORD_EQUAL Не поддерживается
НАЧИНАЕТЯ С Не поддерживается
COP_СПЕЦИФИЧНОЕ_ПРИЛОЖЕНИЕ Не поддерживается

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

Это важно

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

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

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

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

Если этот фильтр связан с DeviceInformationKinddeviceInterface, он перечисляет все объекты, содержащие класс интерфейса аудиозахвата и включенные в данный момент. = преобразуется в COP_EQUALS.

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

Если этот фильтр связан с DeviceInformationKinddevice, он перечисляет все объекты, имеющие по крайней мере один идентификатор оборудования GenCdRom. ~~ преобразуется в COP_VALUE_CONTAINS.

System.Devices.HardwareIds:~~"GenCdRom"

Если этот фильтр связан с DeviceInformationKindDeviceContainer, он перечисляет все объекты с именем модели, содержащим подстроку Майкрософт. ~~ преобразуется в COP_VALUE_CONTAINS.

System.Devices.ModelName:~~"Microsoft"

Если этот фильтр связан с DeviceInformationKindDeviceInterface, он перечисляет все объекты, имеющие имя, начинающееся с подстроки "Microsoft". ~< переводится как COP_STARTSWITH.

System.ItemNameDisplay:~<"Microsoft"

Если этот фильтр связан с DeviceInformationKind устройства , он перечисляет все объекты, имеющие установленное свойство System.Devices.IpAddress. <>[] преобразуется в COP_NOTEQUALS в сочетании со значением NULL.

System.Devices.IpAddress:<>[]

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

System.Devices.IpAddress:=[]

См. также