列舉網路上的裝置

使用 Windows.Devices.Enumeration API,透過無線和網路通訊協定列舉裝置。

重要 API

透過網路或無線通訊協定列舉裝置

有時,您需要列舉未本機連接且只能透過無線或網路通訊協定探索的裝置。 若要這麼做,Windows.Devices.Enumeration API 有三種不同類型的裝置物件:AssociationEndpoint (AEP)、AssociationEndpointContainer (AEP 容器) 和 AssociationEndpointService (AEP 服務)。 這些物件會作為一個群組,稱為 AEP 或 AEP 物件。

某些裝置 API 會提供選取器字串,您可以使用它來列舉可用的 AEP 物件。 這可能包括與系統配對和未配對的裝置。 有些裝置可能不需要配對。 如果在與裝置互動之前需要配對,這些裝置 API 可能會嘗試對裝置進行配對。 Wi-Fi Direct 是遵循此模式的 API 範例。 如果這些裝置 API 不會自動配對裝置,您可以使用 DeviceInformation.Pairing 中提供的 DeviceInformationPairing 物件進行配對。

但是,在某些情況下,您可能希望自己手動探索裝置,而不使用預先定義的選取器字串。 例如,您可能只需要收集有關 AEP 裝置的資訊而不與它們互動,或者您可能想要尋找比使用預先定義選取器字串探索的更多 AEP 物件。 在這種情況下,您將建置自己的選取器字串,並按照建置裝置選取器下的說明使用它。

當您建立自己的選取器時,強烈建議您將列舉範圍限制為您感興趣的通訊協定。 例如,如果您對 UPnP 裝置特別感興趣,則您不會希望透過 Wi-Fi 無線電搜尋 Wi-Fi Direct 裝置。 Windows 為每個通訊協定定義了身分識別,您可以使用它來確定列舉的範圍。 下表列出了通訊協定類型和識別碼。

通訊協定或網路裝置類型 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}
網路印表機 (使用中目錄印表機) {37aba761-2124-454c-8d82-c42962c2de2b}
Windows 立即連線 (WNC) {4c1b1ef8-2f62-4b9f-9bc5-b21ab636138f}
WiGig Docks {a277f3a5-8764-4f88-8045-4c5e962640b1}
HP 印表機的 Wi-Fi 布建 {c85ef710-f344-4792-bb6d-85a4346f1e69}
Bluetooth {e0cbf06c-cd8b-4647-bb8a-263b43f0f974}
藍牙 LE {bb7bb05e-5972-42b5-94fc-76eaa7084d49}
網路相機 {b8238652-b500-41eb-b4f3-4234f7f5ae99}

進階查詢語法 (AQS) 範例

每種 AEP 類型都有一個屬性,您可以使用該屬性將列舉限制為特定通訊協定。 請記住,您可以在 AQS 篩選器中使用 OR 運算子來組合多個通訊協定。 以下是 AQS 篩選器字串的一些範例,示範如何查詢 AEP 裝置。

DeviceInformationKind 設定為 AsssociationEndpoint 時,此 AQS 查詢所有 UPnP AssociationEndpoint 物件。

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

DeviceInformationKind 設定為 AsssociationEndpoint 時,此 AQS 查詢所有 UPnP 和 WSD AssociationEndpoint 物件。

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

如果 DeviceInformationKind 設定為 AssociationEndpointService 時,此 AQS 查詢所有 UPnP AssociationEndpointService 物件。

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

DeviceInformationKind 設定為 AssociationEndpointContainer 時,此 AQS 會查詢 AssociationEndpointContainer 物件,但僅透過列舉 UPnP 通訊協定來尋找它們。 通常,列舉僅來自一種通訊協定的容器是沒有用的。 但是,透過將篩選器限制為可以探索到您裝置的通訊協定,這可能會很有用。

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