Поделиться через


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

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

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

Важные API

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

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

  • DeviceInformationKind из интересующих вас устройств. Дополнительные сведения о том, как 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 String, boolean, 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 Не поддерживается

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

Внимание

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

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

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

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

Если этот фильтр связан с DeviceInformationKind deviceInterface, он перечисляет все объекты, содержащие класс интерфейса аудиозахвата и включенные в данный момент. = преобразуется в 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, он перечисляет все объекты, имеющие имя модели, содержащее подстроку Майкрософт. ~~ преобразуется в COP_VALUE_CONTAINS.

System.Devices.ModelName:~~"Microsoft"

Если этот фильтр связан с DeviceInformationKind deviceInterface, он перечисляет все объекты с именем, начиная с подстроки Майкрософт. ~< преобразуется в 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:=[]

См. также