如何在Win32应用中检测本地蓝牙适配器是否支持蓝牙低功耗(BLE)
解决方案
方案1:纯Win32 API检测(兼容性最优,支持Win7及以上,32位程序无兼容问题)
通过SetupAPI读取蓝牙适配器的内置功能属性实现检测,步骤如下:
- 引入头文件
#include <setupapi.h>,链接库setupapi.lib,引用蓝牙设备类GUIDGUID_DEVINTERFACE_BLUETOOTH - 调用
SetupDiGetClassDevs获取系统所有蓝牙适配器设备列表 - 枚举每个适配器设备,调用
SetupDiGetDeviceProperty读取DEVPKEY_Bluetooth_Radio_SupportedFunctions属性值 - 检查返回的位掩码中是否包含
BTH_RADIO_SUPPORT_LE标记,存在即表示支持BLE
示例代码片段:
DWORD supportedFunc = 0; DEVPROPTYPE propType; if (SetupDiGetDeviceProperty(hDevInfo, &devInfoData, &DEVPKEY_Bluetooth_Radio_SupportedFunctions, &propType, (PBYTE)&supportedFunc, sizeof(supportedFunc), NULL, 0)) { if (supportedFunc & BTH_RADIO_SUPPORT_LE) { // 设备支持BLE } }
方案2:C++/WinRT API调用(无需担心32位兼容问题)
你顾虑的32位程序在64位系统调用UWP蓝牙API的问题不存在,微软所有公开的UWP蓝牙API均支持WOW64模式,32位程序可以正常在64位Win10/11系统上调用 Radio.GetRadiosAsync 和 BluetoothAdapter.GetRadioAsync,无需额外调整编译配置,只要确保系统最低版本要求为Windows 10 1703即可。
方案3:简易调用验证(代码量最少)
直接尝试调用BLE GATT相关的原生API进行可行性验证:调用 BluetoothGATTGetServices 时传入空句柄和空缓冲区,如果返回值不是 ERROR_NOT_SUPPORTED,即表示当前系统蓝牙适配器支持BLE功能。
内容的提问来源于stack exchange,提问作者Thomas T
相关产品推荐
相关产品推荐

