デバイス セレクターのビルドBuild a device selector

重要な APIImportant APIs

デバイス セレクターを作成すると、デバイスを列挙するときに、検索するデバイスを絞り込むことができるようになります。Building a device selector will enable you to limit the devices you are searching through when enumerating devices. これにより、関連する結果のみを取得することができ、システムのパフォーマンスも向上します。This will enable you to only get relevant results and will also improve the performance of the system. 多くのシナリオでは、デバイス スタックからデバイス セレクターを取得します。In most scenarios you get a device selector from a device stack. たとえば、USB 経由で検出したデバイスに GetDeviceSelector を使うとします。For example, you might use GetDeviceSelector for devices discovered over USB. これらのデバイス セレクターは高度なクエリ構文 (AQS) 文字列を返します。These device selectors return an Advanced Query Syntax (AQS) string. AQS 形式を初めて使う場合は、「プログラムでの高度なクエリ構文の使用」をご覧ください。If you are not familiar with the AQS format, you can read more at Using Advanced Query Syntax Programmatically.

フィルター文字列の作成Building the filter string

デバイスを列挙する必要があるにもかかわらず、提供されたデバイス セレクターを目的のシナリオで利用できないことがあります。There are some cases where you need to enumerate devices and a provided device selector is not available for your scenario. デバイス セレクターは、次の情報が含まれる AQS フィルター文字列です。A device selector is an AQS filter string that contains the following information. フィルター文字列を作成する前に、列挙するデバイスに関して、いくつかの重要な情報を知っておく必要があります。Before creating a filter string, you need to know some key pieces of information about the devices you want to enumerate.

  • 目的のデバイスの DeviceInformationKindThe DeviceInformationKind of the devices you are interested in. デバイスの列挙への DeviceInformationKind の影響について詳しくは、「デバイスの列挙」をご覧ください。For more information about how DeviceInformationKind impacts enumerating devices, see Enumerate devices.
  • このトピックで説明されている、AQS フィルター文字列を作成する方法。How to build an AQS filter string, which is explained in this topic.
  • 目的のプロパティ。The properties you are interested in. 使用可能なプロパティは DeviceInformationKind によって異なります。The available properties will depend upon the DeviceInformationKind. 詳しくは、「デバイス情報プロパティ」をご覧ください。See Device information properties for more information.
  • 照会で経由するプロトコル。The protocols you are querying over. ワイヤレスまたはワイヤード ネットワーク経由でデバイスを検索する場合にのみ必要です。This is only needed if you are searching for devices over a wireless or wired network. そのための方法について詳しくは、「ネットワーク経由でデバイスを列挙する」をご覧ください。For more information about doing this, see Enumerate devices over a network.

Windows.Devices.Enumeration API を使うときは、多くの場合、デバイス セレクターを目的のデバイスの種類と組み合わせます。When using the Windows.Devices.Enumeration APIs, you frequently combine the device selector with the device kind that you are interested in. 利用可能なデバイスの種類の一覧は、DeviceInformationKind 列挙値で定義されています。The available list of device kinds is defined by the DeviceInformationKind enumeration. この組み合わせは、利用可能なデバイスを目的のデバイスの種類に限定するために役立ちます。This combination of factors helps you to limit the devices that are available to the ones that you are interested in. DeviceInformationKind を指定しない場合、つまり、使うメソッドに DeviceInformationKind パラメーターを渡さない場合、既定の種類は DeviceInterface です。If you do not specify the DeviceInformationKind, or the method you are using does not provide a DeviceInformationKind parameter, the default kind is DeviceInterface.

Windows.Devices.Enumeration API では、AQS の標準的な構文が使われますが、一部の演算子はサポートされていません。The Windows.Devices.Enumeration APIs use canonical AQS syntax, but not all of the operators are supported. フィルター文字列の作成に使えるプロパティの一覧については、「デバイス情報プロパティ」をご覧ください。For a list of properties that are available when you are constructing your filter string, see Device information properties.

注意  カスタム プロパティを使用して定義されている、 {GUID} PID AQS フィルター文字列を構築するときに、形式は使用できません。Caution  Custom properties that are defined using the {GUID} PID format cannot be used when constructing your AQS filter string. これは、プロパティの型が一般的な既知のプロパティ名から派生しているためです。This is because the property type is derived from the well-known property name.

 

次の表は、AQS 演算子とそれがサポートするパラメーターの型の一覧です。The following table lists the AQS operators and what types of parameters they support.

演算子Operator サポートされる型Supported types
COP_と等しいCOP_EQUAL 文字列、ブール値、GUID、UInt16、UInt32String, boolean, GUID, UInt16, UInt32
COP_NOTEQUALCOP_NOTEQUAL 文字列、ブール値、GUID、UInt16、UInt32String, boolean, GUID, UInt16, UInt32
COP_LESSTHANCOP_LESSTHAN UInt16、UInt32UInt16, UInt32
COP_GREATERTHANCOP_GREATERTHAN UInt16、UInt32UInt16, UInt32
COP_LESSTHANOREQUALCOP_LESSTHANOREQUAL UInt16、UInt32UInt16, UInt32
COP_GREATERTHANOREQUALCOP_GREATERTHANOREQUAL UInt16、UInt32UInt16, UInt32
COP_値_CONTAINSCOP_VALUE_CONTAINS 文字列、文字列配列、ブール値配列、GUID 配列、UInt16 配列、UInt32 配列String, string array, boolean array, GUID array, UInt16 array, UInt32 array
COP_値_NOTCONTAINSCOP_VALUE_NOTCONTAINS 文字列、文字列配列、ブール値配列、GUID 配列、UInt16 配列、UInt32 配列String, string array, boolean array, GUID array, UInt16 array, UInt32 array
COP_値_STARTSWITHCOP_VALUE_STARTSWITH StringString
COP_値_ENDSWITHCOP_VALUE_ENDSWITH StringString
COP_DOSWILDCARDSCOP_DOSWILDCARDS サポートされていませんNot supported
COP_WORD_と等しいCOP_WORD_EQUAL サポートされていませんNot supported
COP_WORD_STARTSWITHCOP_WORD_STARTSWITH サポートされていませんNot supported
COP_アプリケーション_特定COP_APPLICATION_SPECIFIC サポートされていませんNot supported

ヒント:   を指定できますNULLCOP_等しいまたはCOP_NOTEQUALします。Tip  You can specify NULL for COP_EQUAL or COP_NOTEQUAL. これは空のプロパティに変換されます。つまり、値は存在しません。This translates to a property with no value, or that the value does not exist. AQS で指定するNULL空のかっこを使用して[]します。In AQS, you specify NULL by using empty brackets [].

重要な  を使用する場合、 COP_値_CONTAINSCOP_値_NOTCONTAINS演算子文字列および文字列配列で動作が異なります。Important  When using the COP_VALUE_CONTAINS and COP_VALUE_NOTCONTAINS operators, they behave differently with strings and string arrays. 文字列の場合、大文字と小文字を区別する検索が実行され、デバイスに部分文字列として指定された文字列が含まれているかどうかを確認します。In the case of a string, the system will perform a case-insensitive search to see if the device contains the indicated string as a substring. 文字列配列の場合、部分文字列は検索されません。In the case of a string array, substrings are not searched. 文字列配列を使って、配列を検索し、指定された文字列全体が含まれているかどうかを確認します。With the string array, the array is searched to see if it contains the entire specified string. 配列内の要素に部分文字列が含まれているかどうかを確認するために、文字列配列を検索することはできません。It is not possible to search a string array to see if the elements in the array contain a substring.

1 つの AQS フィルター文字列により結果を適切に絞り込むことができない場合は、受け取った結果をさらにフィルター処理できます。If you cannot create a single AQS filter string that will scope your results appropriately, you can filter your results after you receive them. ただしその場合は、最初の AQS フィルター文字列によりできる限り結果を絞り込んでから、Windows.Devices.Enumeration API に渡すことをお勧めします。However, if you choose to do this, we recommend limiting the results from your initial AQS filter string as much as possible when you provide it to the Windows.Devices.Enumeration APIs. これにより、アプリのパフォーマンスを向上させることができます。This will help improve the performance of your application.

AQS 文字列の例AQS string examples

ここで示している例では、AQS 構文を使って、列挙するデバイスを制限する方法を説明しています。The following examples demonstrate how the AQS syntax can be used to limit the devices you want to enumerate. 以下のフィルター文字列はすべて、DeviceInformationKind とペアリングされており、完全なフィルターを作成できます。All of these filter strings are paired up with a DeviceInformationKind to create a complete filter. どの種類も指定しない場合、既定の種類は DeviceInterface になります。If no kind is specified, remember that the default kind is DeviceInterface.

このフィルターを DeviceInterfaceDeviceInformationKind とペアリングすると、オーディオ キャプチャ インターフェイス クラスを含むオブジェクトと、現在有効なオブジェクトがすべて列挙されます。When this filter is paired with a DeviceInformationKind of DeviceInterface, it enumerates all objects that contain the Audio Capture interface class and that are currently enabled. = 変換されますCOP_EQUALSします。= translates to COP_EQUALS.

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

このフィルターを DeviceDeviceInformationKind とペアリングすると、GenCdRom のハードウェア ID を 1 つ以上持つオブジェクトがすべて列挙されます。When this filter is paired with a DeviceInformationKind of Device, it enumerates all objects that have at least one hardware id of GenCdRom. ~~ 変換されますCOP_値_CONTAINSします。~~ translates to COP_VALUE_CONTAINS.

System.Devices.HardwareIds:~~"GenCdRom"

このフィルターを DeviceContainerDeviceInformationKind とペアリングすると、部分文字列として Microsoft を含むモデル名を持つオブジェクトがすべて列挙されます。When this filter is paired with a DeviceInformationKind of DeviceContainer, it enumerates all objects that have a model name containing the substring Microsoft. ~~ 変換されますCOP_値_CONTAINSします。~~ translates to COP_VALUE_CONTAINS.

System.Devices.ModelName:~~"Microsoft"

このフィルターを DeviceInterfaceDeviceInformationKind とペアリングすると、部分文字列の Microsoft から始まる名前を持つオブジェクトがすべて列挙されます。When this filter is paired with a DeviceInformationKind of DeviceInterface, it enumerates all objects that have a name starting with the substring Microsoft. ~< 変換されますCOP_STARTSWITHします。~< translates to COP_STARTSWITH.

System.ItemNameDisplay:~<"Microsoft"

このフィルターを DeviceDeviceInformationKind とペアリングすると、System.Devices.IpAddress プロパティ セットを持つオブジェクトがすべて列挙されます。When this filter is paired with a DeviceInformationKind of Device, it enumerates all objects that have a System.Devices.IpAddress property set. <>[] 変換されますCOP_NOTEQUALSと組み合わせて、 NULL値。<>[] translates to COP_NOTEQUALS combined with a NULL value.

System.Devices.IpAddress:<>[]

このフィルターを DeviceDeviceInformationKind とペアリングすると、System.Devices.IpAddress プロパティ セットを持たないオブジェクトがすべて列挙されます。When this filter is paired with a DeviceInformationKind of Device, it enumerates all objects that do not have a System.Devices.IpAddress property set. =[] 変換されますCOP_EQUALSと組み合わせて、 NULL値。=[] translates to COP_EQUALS combined with a NULL value.

System.Devices.IpAddress:=[]