Bluetooth 使用WMI列出并启用禁用的蓝牙服务?

Bluetooth 使用WMI列出并启用禁用的蓝牙服务?,bluetooth,wmi,Bluetooth,Wmi,我目前正在寻找一种方法来列出远程蓝牙设备公开的服务并启用它们 通常我会使用WindowsAPI函数(或者更可能是一个已知的包装器)列出服务,并通过GUID(SetServiceEnable)启用它们 问题是,设备公开了两个具有相同GUID的服务 因此,使用windowsAPI函数只能启用其中一项服务。无法启用其他服务 我想也许WMI可以做到这一点,但我仍然是WMI新手,找不到任何WMI Windows本身能够通过servicemenu启用“无”或特定服务 更新 我想解决的问题是能够启用第一个或第

我目前正在寻找一种方法来列出远程蓝牙设备公开的服务并启用它们

通常我会使用WindowsAPI函数(或者更可能是一个已知的包装器)列出服务,并通过GUID(SetServiceEnable)启用它们

问题是,设备公开了两个具有相同GUID的服务

因此,使用windowsAPI函数只能启用其中一项服务。无法启用其他服务

我想也许WMI可以做到这一点,但我仍然是WMI新手,找不到任何WMI

Windows本身能够通过servicemenu启用“无”或特定服务

更新 我想解决的问题是能够启用第一个或第二个服务。现在只有第一个服务(这通常是我需要的服务),但我找不到启用第二个服务的解决方案(除了使用Windows UI)


如果两个服务都启用,我在devicemanager(SPP)中有两个通讯端口。

因为我不能添加评论/问题(还没有stackoverflow的特权)。这是我最好的照片

如果我理解正确,在服务记录中多次提供服务是无效的,对吗?您能否在蓝牙配对界面中右键单击设备,查看是否看到两个服务,以及是否可以通过Windows UI启用它们?一旦您启用它们,您是否会在设备管理器(按连接查看)中看到该设备下的两个PNP devnode,以及您启用的两个服务的相应相反角色?(我无法尝试此操作,因为我不知道有哪个设备具有两个相同的UUID。)

您可能已经知道,当您在远程设备上启用服务时,实际上并不是通过Windows Bluetooth API在远程设备上启用服务。您所做的是告诉Windows中的核心蓝牙组件生成相应的服务的相反角色。(这就是BluetoothSetLocalServiceInfo所做的。)例如,如果远程设备支持A2DP接收器,通过启用该服务,桌面上的蓝牙服务将为该设备注册一个A2DP源服务,该服务将生成一个PNP devnode,用于匹配要安装在该devnode上的A2DP源驱动程序。通过禁用该服务,蓝牙服务将注销A2DP源devnode,PNP devnode将被删除(有点像拔下USB设备)

根据您看到的被复制的配置文件,在远程设备的同一mac地址上有两个匹配的设备对象和驱动程序对象实例可能没有意义


我的答案(实际上并没有回答您的问题)是检查在桌面上启用这两个服务是否有效,在这种情况下,您将使用桌面上的驱动程序。例如,A2DP和HFP的捆绑需要A2DP和HFP来同步某些行为,例如AVDTP挂起。根据实现和驱动程序的不同,他们可能不希望安装两个A2DP驱动程序实例,从而导致本地驱动程序处于意外状态。

Windows本身可以通过servicemenu同时启用、不启用或启用特定服务。我没有看设备管理器,但是。不幸的是,我现在正在度假,要到下周才能进行任何测试。顺便说一句:我们使用的是FTDI蓝牙芯片,它公开了两个SPP,分别是SPP和ATOVERSP。另请参阅更新。那么我认为也有一种方法可以通过编程实现这一点。但是为什么您认为WMI是您的解决方案呢?我可能错过了什么。我想我可以用一种方法来做。但在检查Windows蓝牙API时,我没有找到实现目标的方法。