c++ - 获取范围内的蓝牙设备

标签 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;

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

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

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

最佳答案

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

search_criteria.fIssueInquiry = TRUE;

并且可能使用一些大于 0 的超时。

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

另一种方法是使用 WinSock APIs .

关于c++ - 获取范围内的蓝牙设备,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18826551/

相关文章:

c++ - OpenGL 更新顶点数组/缓冲区

ios - CoreBluetooth 广告未启动

c++ - 在 C++11 线程中,std::mutex 对内存可见性有什么保证?

c++ - 指针对象在某处损坏

windows - 如何找出哪个库包含 libcmt?

C++如何将unicode字符转换为int

c# - 这个 C# 代码是什么意思?

android - Android 上的蓝牙 : startDiscovery doesn't work and I have bluetooth enabled

c++ - std::facet 对象上的可变标志

c - 加载dll时访问冲突