获取范围内的蓝牙设备

use*_*541 5 c++ windows bluetooth

我正在为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;
Run Code Online (Sandbox Code Playgroud)

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

我需要找到一种方法来获取范围内的设备,而不需要记住设备.

目前我正在做的是,我正在尝试打开一个套接字并尝试进行通信,但还有其他方法吗?

Pup*_*sik 2

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

search_criteria.fIssueInquiry = TRUE;
Run Code Online (Sandbox Code Playgroud)

也许使用一些大于 0 的超时。

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

另一种方法是使用WinSock API