#Requires AutoHotkey v2.0 ; example name := "Tebayaki's AirPods Pro" if 0 == res := ConnectBluetoothAudioDevieByName(name) MsgBox "连接成功!" ConnectBluetoothAudioDevieByName(deviceName) { if !deviceInfo := FindRememberedDeviceByName(deviceName) return 1 ; Device not found if GetBluetoothDevicefConnected(deviceInfo) return 2 ; The device is already connected if !ReEnableAVRemoteControlService(deviceInfo) return 3 ; Unable to reenable AVRemoteControlService if !IsDeviceConnected(GetBlueToothDeviceAddress(deviceInfo)) return 4 ; Unable to connect to the device return 0 } FindRememberedDeviceByName(deviceName) { if !hModule := DllCall("LoadLibraryW", "str", "Bthprops.cpl", "ptr") return res := false deviceSearchParams := Buffer(40, 0) NumPut("uint", deviceSearchParams.Size, deviceSearchParams) NumPut("int", 1, deviceSearchParams, 8) NumPut("uchar", 1, deviceSearchParams, 24) deviceInfo := Buffer(560) NumPut("uint", deviceInfo.Size, deviceInfo) if hDeviceFind := DllCall("Bthprops.cpl\BluetoothFindFirstDevice", "ptr", deviceSearchParams, "ptr", deviceInfo, "ptr") { loop { if (StrGet(deviceInfo.Ptr + 64) == deviceName) { res := true break } } until !DllCall("Bthprops.cpl\BluetoothFindNextDevice", "ptr", hDeviceFind, "ptr", deviceInfo) DllCall("Bthprops.cpl\BluetoothFindDeviceClose", "ptr", hDeviceFind) } DllCall("FreeLibrary", "ptr", hModule) return res ? deviceInfo : "" } IsDeviceConnected(address) { res := false if !hModule := DllCall("LoadLibraryW", "str", "Bthprops.cpl", "ptr") return deviceSearchParams := Buffer(40, 0) NumPut("uint", deviceSearchParams.Size, deviceSearchParams) NumPut("int", 1, deviceSearchParams, 16) NumPut("uchar", 1, deviceSearchParams, 24) deviceInfo := Buffer(560) NumPut("uint", deviceInfo.Size, deviceInfo) if hDeviceFind := DllCall("Bthprops.cpl\BluetoothFindFirstDevice", "ptr", deviceSearchParams, "ptr", deviceInfo, "ptr") { loop { if (NumGet(deviceInfo, 8, "uint64") == address) { res := true break } } until !DllCall("Bthprops.cpl\BluetoothFindNextDevice", "ptr", hDeviceFind, "ptr", deviceInfo) DllCall("Bthprops.cpl\BluetoothFindDeviceClose", "ptr", hDeviceFind) } DllCall("FreeLibrary", "ptr", hModule) return res } ReEnableAVRemoteControlService(deviceInfo) { res := false if !hModule := DllCall("LoadLibraryW", "str", "Bthprops.cpl", "ptr") return DllCall("ole32\CLSIDFromString", "str", "{0000110E-0000-1000-8000-00805F9B34FB}", "ptr", AVRemoteControlServiceClass_UUID := Buffer(16)) if 1060 !== DllCall("Bthprops.cpl\BluetoothSetServiceState", "ptr", 0, "ptr", deviceInfo, "ptr", AVRemoteControlServiceClass_UUID, "uint", 0) { if 0 == DllCall("Bthprops.cpl\BluetoothSetServiceState", "ptr", 0, "ptr", deviceInfo, "ptr", AVRemoteControlServiceClass_UUID, "uint", 1) { res := true } } DllCall("FreeLibrary", "ptr", hModule) return res } GetBlueToothDeviceAddress(deviceInfo) => NumGet(deviceInfo, 8, "uint64") GetBluetoothDevicefConnected(deviceInfo) => NumGet(deviceInfo, 20, "int")
声明:站内资源为整理优化好的代码上传分享与学习研究,如果是开源代码基本都会标明出处,方便大家扩展学习路径。请不要恶意搬运,破坏站长辛苦整理维护的劳动成果。本站为爱好者分享站点,所有内容不作为商业行为。如若本站上传内容侵犯了原著者的合法权益,请联系我们进行删除下架。
评论(0)