Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Селектор устройств позволяет ограничить устройства для поиска при перечислении устройств, что помогает получить более релевантные результаты и повысить производительность системы.
В большинстве случаев вы получаете селектор устройств из стека устройств. Например, вы можете использовать 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:<>[]
Если этот фильтр связан с
System.Devices.IpAddress:=[]