如何编写脚本来连接/断开蓝牙设备?

如何编写脚本来连接/断开蓝牙设备?

我有蓝牙耳机,我用它来听手机上的音乐和笔记本电脑上的视频。它们不能同时连接到两个设备(注意这里),所以我必须先断开与一个设备的连接,然后才能连接下一个设备。

要在 Windows 7 上执行此操作,我必须打开“设备和打印机”,打开我的蓝牙耳机,然后单击“连接/断开连接”按钮。我希望能够运行一个触发“连接/断开连接”按钮的脚本。这样我就可以在桌面上创建快捷方式或者添加键盘快捷键。

我通过创建蓝牙 heaphones 窗口的快捷方式(在“设备和打印机”中,右键单击您的蓝牙设备并选择“创建快捷方式”)对其进行了一定程度的简化。但进一步简化会更好。

答案1

事实证明,一旦设备正在使用的所有服务都被禁用,Windows 就会自动释放并断开设备。在下面的 WH-1000XM3 示例中,这些是语音和音乐,大多数耳机的工作方式相同。这当然取决于所使用的设备。

你会需要蓝牙命令行工具

语音实际上是免提服务 (HFP),音乐只是音频接收器 (A2DP)。服务标识符是必需的,可以通过使用btdiscovery上述包中的命令或通过蓝牙服务列表. HFP语音是111e,A2DP音乐是110b

每个btcom命令行帮助:

用法:

btcom {-c|-r} {-bBluetoothAddress | -nFriendlyName} [-s{sp|dun|GUID|UUID}]

 -c  Create association between COM port and a remote service (Enable non-COM service).
 -r  Remove association between COM port and a remote service (Disable non-COM service).
 -s  Remote service to use (Default is Serial Port Service)
 -b  Bluetooth address of remote device in (XX:XX:XX:XX:XX:XX) format. 
 -n  Friendly name of remote device.

要断开设备连接,请发出以下命令(仅在以管理员身份运行时才有效,使用 Windows 10 1809(17763.437)):

"C:\Program Files (x86)\Bluetooth Command Line Tools\bin\btcom" -n "WH-1000XM3" -r -s111e
"C:\Program Files (x86)\Bluetooth Command Line Tools\bin\btcom" -n "WH-1000XM3" -r -s110b

要再次连接,请发出相同的命令-c,而不是-r。这适用于其他设备,而不仅仅是耳机,只要禁用/启用 Windows 连接的所有服务/配置文件即可。

注意:由于执行蓝牙发现,使用-n <friendly name>比使用慢得多。-b <address>

答案2

我发现了一个类似的问题,这是解决方案。 https://stackoverflow.com/questions/29724513/automatically-adding-a-bluetooth-device-in-windows-8

@ECHO OFF
if exist toggle.txt goto :2
btpair -u
C:\NIRCMD\NIRCMDC setdefaultsounddevice "CompSpeak" 1
C:\NIRCMD\NIRCMDC setdefaultsounddevice "CompSpeak" 2

echo toggle>>toggle.txt

exit
:2
btpair -n"[Samsung] AirTrack" -p0000
C:\NIRCMD\NIRCMDC setdefaultsounddevice "Headphones" 1
C:\NIRCMD\NIRCMDC setdefaultsounddevice "Headphones" 2

del toggle.txt /q

exit

OP 说他收到了一个弹出消息框,但是他也在使用 Windows 8,因此这可能是他的设置所特有的。

答案3

Autohotkey 可以在 Win10 上通过调用 DLL 来实现。

  1. 安装 authotkeyhttps://www.autohotkey.com/
  2. 下载此脚本https://github.com/a5sd45a4sd/bluco
  3. 在脚本顶部,编辑您的设备名称
  4. 运行脚本

答案4

虽然这篇文章有点陈旧,但下面的代码AutoITv3对我来说是有效的。虽然不是最理想的,但肯定比手动操作要好。

我尝试了 stackexchange 网站上各种帖子中的其他答案(bttools, nircmd, pnputil, devcon, wmi通过powershell),但似乎都没有充分解决这个问题已配对但未连接/已禁用声音设备问题,这比配对已配对的设备更重要。

; Run the sound cpanel
Run("control.exe mmsys.cpl")
WinWaitActive("Sound","",5)
; might need to Send("{DOWN}") if bt device is not the first entry in the list
; right click on the first entry
ControlClick("Sound","",1000,"right",1,69,27)
Send("{DOWN}")
Send("{DOWN}")
Send("{ENTER}")
Sleep(2000)
WinClose("Sound")
WinWaitClose("Sound","",2000)

相关内容