获取范围内的蓝牙设备

我正在开发Windows桌面。 我想获取范围内的设备,然后显示为用户列表。

这是我正在使用的代码:

HBLUETOOTH_DEVICE_FIND founded_device; BLUETOOTH_DEVICE_INFO device_info; device_info.dwSize = sizeof(device_info); BLUETOOTH_DEVICE_SEARCH_PARAMS search_criteria; search_criteria.dwSize = sizeof(BLUETOOTH_DEVICE_SEARCH_PARAMS); search_criteria.fReturnAuthenticated = FALSE; search_criteria.fReturnRemembered = FALSE; search_criteria.fReturnConnected = TRUE; search_criteria.fReturnUnknown = FALSE; search_criteria.fIssueInquiry = FALSE; search_criteria.cTimeoutMultiplier = 0; founded_device = BluetoothFindFirstDevice(&search_criteria, &device_info); if (founded_device == NULL) { _tprintf(TEXT("Error: \n%s\n"), getErrorMessage(WSAGetLastError(), error)); return -1; } do { _tprintf(TEXT("founded device: %s\n"), device_info.szName); } while (BluetoothFindNextDevice(founded_device, &device_info)); return 0; 

我的问题是,在范围内的设备列表,我总是得到记忆的设备。 即使fReturnRemembered设置为false。

我需要find一种方法来获得没有记住设备的范围内的设备。

目前我正在做的是,我试图打开一个套接字,并尝试沟通,但有没有其他的方式?

如果你想开始扫描(设备查询),你应该改变搜索条件:

 search_criteria.fIssueInquiry = TRUE; 

也许使用大于0的超时。

顺便说一句,如果BluetoothFindFirstDevice(&search_criteria,&device_info); 返回NULL并不意味着它失败,它可能会结束搜索没有结果。 你应该通过WSAGetLastError()得到错误,并检查它是否是ERROR_NO_MORE_ITEMS

另一种方法是使用WinSock API 。