次の方法で共有


ネットワーク経由でデバイスを列挙する

Windows.Devices.Enumeration API を使用して、ワイヤレス プロトコルとネットワーク プロトコル経由でデバイスを列挙します。

重要な API

ネットワークプロトコルまたはワイヤレス プロトコルを介したデバイスの列挙

場合によっては、ローカルに接続されておらず、ワイヤレスまたはネットワーク プロトコル経由でのみ検出できるデバイスを列挙する必要があります。 これを行うために、 Windows.Devices.Enumeration API には、 AssociationEndpoint (AEP)、 AssociationEndpointContainer (AEP コンテナー)、 AssociationEndpointService (AEP サービス) の 3 種類のデバイス オブジェクトがあります。 グループとして、これらは AP または AEP オブジェクトと呼ばれます。

一部のデバイス API には、使用可能な AEP オブジェクトを列挙するために使用できるセレクター文字列が用意されています。 これには、ペアリングされていて、システムとペアリングされていない両方のデバイスが含まれる場合があります。 一部のデバイスではペアリングが必要ない場合があります。 これらのデバイス API は、デバイスを操作する前にペアリングが必要な場合に、デバイスのペアリングを試みる場合があります。 Wi-Fi Direct は、このパターンに従う API の例です。 これらのデバイス API でデバイスが自動的にペアリングされない場合は、DeviceInformation.Pair から使用可能な DeviceInformationPairing オブジェクトを使用してペアリングできます。

ただし、定義済みのセレクター文字列を使用せずに、自分でデバイスを手動で検出したい場合があります。 たとえば、操作せずに AEP デバイスに関する情報を収集する必要がある場合や、定義済みのセレクター文字列で検出されるよりも多くの AEP オブジェクトを見つける必要がある場合があります。 この場合は、独自のセレクター文字列を作成し、 デバイス セレクターの構築の手順に従って使用します。

独自のセレクターを構築するときは、列挙型のスコープを関心のあるプロトコルに制限することを強くお勧めします。 たとえば、特に UPnP デバイスに関心がある場合は、Wi-Fi Direct デバイスの Wi-Fi 無線検索を行いたくありません。 Windows では、列挙のスコープを設定するために使用できるプロトコルごとに ID が定義されています。 次の表に、プロトコルの種類と識別子を示します。

プロトコルまたはネットワーク デバイスの種類 Id
UPnP (DIAL と DLNA を含む) {0e261de4-12f0-46e6-91ba-428607ccef64}
デバイス上の Web サービス (WSD) {782232aa-a2f9-4993-971b-aedc551346b0}
Wi-Fi Direct {0407d24e-53de-4c9a-9ba1-9ced54641188}
DNS サービス検出 (DNS-SD) {4526e8c1-8aac-4153-9b16-55e86ada0e54}
サービスのポイント {d4bf61b3-442e-4ada-882d-fa7B70c832d9}
ネットワーク プリンター (Active Directory プリンター) {37aba761-2124-454c-8d82-c42962c2de2b}
Windows Connect Now (WNC) {4c1b1ef8-2f62-4b9f-9bc5-b21ab636138f}
WiGig ドック {a277f3a5-8764-4f88-8045-4c5e962640b1}
HP プリンターの Wi-Fi プロビジョニング {c85ef710-f344-4792-bb6d-85a4346f1e69}
Bluetooth {e0cbf06c-cd8b-4647-bb8a-263b43f0f974}
Bluetooth LE {bb7bb05e-5972-42b5-94fc-76eaa7084d49}
ネットワーク カメラ {b8238652-b500-41eb-b4f3-4234f7f5ae99}

高度なクエリ構文 (AQS) の例

各 AEP の種類には、列挙型を特定のプロトコルに制限するために使用できるプロパティがあります。 AQS フィルターで OR 演算子を使用して、複数のプロトコルを組み合わせることができます。 AEP デバイスのクエリ方法を示す AQS フィルター文字列の例を次に示します。

この AQS は、DeviceInformationKindAsssociationEndpoint に設定されている場合に、すべての UPnP AssociationEndpoint オブジェクトを照会します。

System.Devices.Aep.ProtocolId:="{0e261de4-12f0-46e6-91ba-428607ccef64}"

この AQS は、DeviceInformationKindAsssociationEndpoint に設定されている場合に、すべての UPnP および WSD AssociationEndpoint オブジェクトに対してクエリを実行します。

System.Devices.Aep.ProtocolId:="{782232aa-a2f9-4993-971b-aedc551346b0}" OR
System.Devices.Aep.ProtocolId:="{0e261de4-12f0-46e6-91ba-428607ccef64}"

この AQS は、DeviceInformationKindAsssociationEndpointService に設定されている場合、すべての UPnP AssociationEndpointService オブジェクトを照会します。

System.Devices.AepService.ProtocolId:="{0e261de4-12f0-46e6-91ba-428607ccef64}"

この AQS は、DeviceInformationKindAssociationEndpointContainer に設定されている場合にAssociationEndpointContainer オブジェクトを照会しますが、UPnP プロトコルを列挙することによってのみ検索されます。 通常、1 つのプロトコルからのみ取得されるコンテナーを列挙することは役に立ちません。 ただし、これは、デバイスを検出できることがわかっているプロトコルにフィルターを制限すると便利な場合があります。

System.Devices.AepContainer.ProtocolIds:~~"{0e261de4-12f0-46e6-91ba-428607ccef64}"