获取范围内的蓝牙设备

Get bluetooth devices in range

本文关键字:范围内 获取      更新时间:2023-10-16

我正在为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%sn"), getErrorMessage(WSAGetLastError(), error));
    return -1;
}
do
{
    _tprintf(TEXT("founded device: %sn"), device_info.szName);
} while (BluetoothFindNextDevice(founded_device, &device_info));
return 0;

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

我需要找到一种方法来仅获取范围内的设备而没有记住的设备。

目前我正在做的是,我正在尝试打开一个插座并尝试交流,但是还有其他方法吗?

如果要

开始扫描(设备查询),则应更改搜索条件:

search_criteria.fIssueInquiry = TRUE;

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

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

另一种方法是使用 WinSock API。