通过网络枚举设备

使用 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 Direct 设备进行 Wi-Fi 无线电搜索。 Windows 定义了可用于限定枚举范围的每个协议的标识。 下表列出了协议类型和标识符。

协议或网络设备类型 Id
UPnP (包括 DIAL 和 DLNA) {0e261de4-12f0-46e6-91ba-428607ccef64}
设备上的 Web 服务 (WSD) {782232aa-a2f9-4993-971b-aedc551346b0}
WLAN 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 立即连接 (WNC) {4c1b1ef8-2f62-4b9f-9bc5-b21ab636138f}
WiGig 扩展坞 {a277f3a5-8764-4f88-8045-4c5e962640b1}
HP 打印机的 Wi-Fi 预配 {c85ef710-f344-4792-bb6d-85a4346f1e69}
蓝牙 {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 设置为 AsssociationEndpointService,则此 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}"