windows蓝牙编程—— 0 获取本地蓝牙的句柄和信息
写在开头
最近在弄 windows API 的蓝牙,实现windows 10 的 PC电脑自动和目标蓝牙配对、连接、和收发数据。这是算是一个开始,要进行蓝牙通信的前提,需要能够获取到本地蓝牙的句柄和信息。后续会继续更新整个实现代码。由于本人也是边看API变实现,代码逻辑可能会有些混乱,欢迎留言。
实现例子在文章末尾,前面是一些用到的API记录
1 windows API 函数英文注释和翻译
1.1 bluetoothapis
1.1.1 BLUETOOTH_DEVICE_SEARCH_PARAMS
参考地址:https://docs.microsoft.com/zh-cn/windows/win32/api/BluetoothAPIs/ns-bluetoothapis-bluetooth_device_search_params
功能: specifies search criteria for Bluetooth device searches.
指定蓝牙设备搜索的搜索标准
句法:
typedef struct _BLUETOOTH_DEVICE_SEARCH_PARAMS {DWORD dwSize; // 结构体大小,以字节为单位BOOL fReturnAuthenticated; // 指定搜索返回 已认证 的蓝牙设备 authenticated->已认证BOOL fReturnRemembered; // 指定搜索返回 已记住 的蓝牙设备BOOL fReturnUnknown; // 指定搜索返回 未知 的蓝牙设备BOOL fReturnConnected; // 指定搜索返回 已连接 的蓝牙设备BOOL fIssueInquiry; // 指定发出新的查询UCHAR cTimeoutMultiplier; // 直接翻译就是超时的倍数,以 1.28秒为单位,最大值为48HANDLE hRadio; // 无线电句柄,在该无线电句柄上执行查询,如果设置为NULL,所有本地蓝牙设备都执行搜索
} BLUETOOTH_DEVICE_SEARCH_PARAMS;
1.1.2 BLUETOOTH_DEVICE_INFO_STRUCT
参考地址:https://docs.microsoft.com/zh-cn/windows/win32/api/bluetoothapis/ns-bluetoothapis-bluetooth_device_info_struct
功能: provides information about a Bluetooth device.
提供有关蓝牙的信息
句法:
typedef struct _BLUETOOTH_DEVICE_INFO {DWORD dwSize; // 该结构体大小,以字节为单位BLUETOOTH_ADDRESS Address; // 蓝牙设备地址ULONG ulClassofDevice; // 设备的类型BOOL fConnected; // 指定是否连接设备BOOL fRemembered; // 指定该设备是否为可记住的设备。并非所有记住 的设备都通过身份验证BOOL fAuthenticated; // 指定设备是经过身份验证,配对还是绑定。所有经过身份验证的设备都会被记住。SYSTEMTIME stLastSeen; // 上次查看该设备的时间为 SYSTEMTIME 结构SYSTEMTIME stLastUsed; // 上次使用该设备的时间为 SYSTEMTIME 结构WCHAR szName[BLUETOOTH_MAX_NAME_SIZE]; // 设备名称。
} BLUETOOTH_DEVICE_INFO_STRUCT;
1.1.3 BluetoothFindFirstDevice
参考地址:https://docs.microsoft.com/zh-cn/windows/win32/api/bluetoothapis/nf-bluetoothapis-bluetoothfindfirstdevice
功能:begins the enumeration Bluetooth devices.
开始枚举蓝牙设备
//HBLUETOOTH_DEVICE_FIND 一个句柄,该函数返回一个 HANDLEHBLUETOOTH_DEVICE_FIND BluetoothFindFirstDevice(const BLUETOOTH_DEVICE_SEARCH_PARAMS *pbtsp, // BLUETOOTH_DEVICE_INFO *pbtdi
);
1.1.4 BLUETOOTH_FIND_RADIO_PARAMS
参考地址:https://docs.microsoft.com/zh-cn/windows/win32/api/bluetoothapis/ns-bluetoothapis-bluetooth_find_radio_params
功能:enumerating installed Bluetooth radios.
开始枚举安装的蓝牙无线电
句法:
typedef struct _BLUETOOTH_FIND_RADIO_PARAMS {DWORD dwSize; // 该结构的大小,以字节为单位
} BLUETOOTH_FIND_RADIO_PARAMS;
1.1.5 BluetoothFindFirstRadio
参考地址:https://docs.microsoft.com/zh-cn/windows/win32/api/bluetoothapis/nf-bluetoothapis-bluetoothfindfirstradio
功能:begins the enumeration of local Bluetooth radios.
开始枚举本地的蓝牙无线电
句法:
HBLUETOOTH_RADIO_FIND BluetoothFindFirstRadio(const BLUETOOTH_FIND_RADIO_PARAMS *pbtfrp, // 指向 BLUETOOTH_FIND_RADIO_PARAMS 指针HANDLE *phRadio // 指向第一个枚举的无线电句柄将返回的句柄。当不再需要时,必须通过CloseHandle关闭此句柄。
);
返回值:
创建一个HBLUETOOTH_RADIO_FIND,可以与BluetoothFindNextRadio函数一起使用,不需要次句柄时,必须通过BluetoothFindRadioClose将其关闭
1.1.6 BluetoothFindNextRadio
参考地址:https://docs.microsoft.com/zh-cn/windows/win32/api/bluetoothapis/nf-bluetoothapis-bluetoothfindnextradio
功能:功能找到下一个蓝牙无线电(本地)
句法:
BOOL BluetoothFindNextRadio(HBLUETOOTH_RADIO_FIND hFind, // 通过调用 BluetootrhFindFirstRadio 返回的句柄HANDLE *phRadio // 指向下一个枚举的无线电蓝牙返回的句柄
);
获取本地蓝牙的句柄和信息的例子:
#include <afxtempl.h>
#include <iostream>
#include <bthsdpdef.h>
#include <BluetoothAPIs.h>
#include "winsock2.h"#include <iostream>
#include <sstream>
#include <string>
#include <iomanip>#pragma comment(lib,"Ws2_32.lib")
#pragma comment(lib,"Bthprops.lib") using namespace std;int main()
{ CArray<HANDLE, HANDLE&> m_arrLocal;// 先要找到本地的蓝牙//HBLUETOOTH_DEVICE_FIND hradio; // 本地无线电设备句柄, HANDLE 的别名HANDLE hradio;BLUETOOTH_FIND_RADIO_PARAMS bfrp;bfrp.dwSize = sizeof(bfrp);cout << "a sizeof(bfrep) = " << bfrp.dwSize << endl;HBLUETOOTH_RADIO_FIND hFind = BluetoothFindFirstRadio(&bfrp, &hradio); // 该函数返回的句柄就是为了给 BluetoothFindNextRadio使用的cout << "b sizeof(bfrep) = " << bfrp.dwSize << endl;if (hFind) {// 一旦找到了第一个蓝牙设备,就利用第一个蓝牙设备去找第二个蓝牙设备// 创建一个数组,用来存储设备的信息CArray<BLUETOOTH_RADIO_INFO, BLUETOOTH_RADIO_INFO&> m_arrlocalmessage;BLUETOOTH_RADIO_INFO pbri={ sizeof(BLUETOOTH_RADIO_INFO) };cout << "发现本地第一个蓝牙" << endl;do {if (hradio) {m_arrLocal.Add(hradio);// 获取句柄 hradio 的蓝牙信息int success = BluetoothGetRadioInfo(hradio, &pbri);if (success == 0) {cout << "获取本地蓝牙设备信息成功" << endl;m_arrlocalmessage.Add(pbri);cout << "蓝牙信息:" << endl;cout << "dwSize = " << pbri.dwSize << endl;cout << "address = ";// 从 address 的 rgBytes 长度为6stringstream ioss;string s_temp;for (int i = 5; i >= 0; i--) {ioss << setiosflags(ios::uppercase) << hex << (int)pbri.address.rgBytes[i] << ":";}ioss >> s_temp;cout << s_temp << endl;wcout << "szName = " << pbri.szName << endl;cout << "ulClassofDevice = " << pbri.ulClassofDevice << endl;cout << "lmpSubversion = " << pbri.lmpSubversion << endl;cout << "manufacturer = " << pbri.manufacturer << endl;}}} while (BluetoothFindNextRadio(hFind, &hradio));// 循环退出后,句柄 hFind 就没用了,关闭掉BluetoothFindRadioClose(hFind);}else {cout << "未能发现本地蓝牙" << endl;}DWORD error;error = GetLastError();cout << error << endl;cout << "蓝牙个数为:" << m_arrLocal.GetCount() << endl;system("pause");}
windows蓝牙编程—— 0 获取本地蓝牙的句柄和信息相关推荐
- Windows核心编程_获取鼠标指定位置的RGB颜色值
Windows核心编程_获取鼠标指定位置的RGB颜色值 大家平常会见到很多屏幕取色工具,其原理都是获取鼠标位置的屏幕像素点颜色! 一般思路都是:获取鼠标位置,然后取出鼠标指向的屏幕像素点颜色! Get ...
- 蓝牙4.0、经典蓝牙、BT、BLE的关系与区别
蓝牙3.0 比较老的标准了. 蓝牙4.0 蓝牙4.0标准是2012年推出的蓝牙标准,是蓝牙3.0的升级版本,相比3.0版本它更省电.成本更低,3毫秒低延迟.具有超长有效连接距离和AES-128加密 ...
- windows蓝牙编程——1 扫描周边蓝牙并获取蓝牙信息
1 需要用到的接口 代码实现的功能:搜索周边蓝牙,并提示目标蓝牙是否被搜索到 详细说明就不写了,在这里列举一下,详细说明可以看上一篇文章.或者参考windows关于蓝牙编程API的官方说明,连接在下方 ...
- Windows Mobile 编程 (Win32) - 获取设备能力
<Windows 程序设计>第五章重点讲述图形基础.首先一个示例代码是获取设备描述表信息.代码与Windows Mobile 编程 (Win32) - 输出文本中的代码类似. #inclu ...
- android 蓝牙4.0读写,android蓝牙4.0的知识要点
蓝牙4.0 这次主要讲解蓝牙4.0的基本要点,作为自己的备忘录记录下来吧.首先普及一下蓝牙4.0基于Gatt协议来实现.而蓝牙4.0以下的是传统蓝牙,基于socket方式来实现.所以4.0以上的蓝牙具 ...
- C/C++:Windows编程—代码获取本地所有网卡信息(网卡描述,IP地址,子网掩码,MAC地址)
先看效果 看代码 使用 GetAdaptersInfo 函数获取网卡的所有信息. MSDN函数说明 https://docs.microsoft.com/en-us/windows/desktop/a ...
- Android 10.0获取本地视频及其预览图
打开本地视频选择器 private void openLocalVideo(){Intent intent = new Intent();intent.setAction(Intent.ACTION_ ...
- java swing 字体_Java Swing界面编程(4)---获取本地字体
ubuntu 安装tp-link usb无线网卡 tl-wn821n 全过程 1. 无线网卡识别 在终端中输入 lsusb ,观察插入USB无线网卡tl-wn821n,是否多显示出Realt ...
- iOS编程上获取本地时间以及星期几时间
本文回复一位网友关于获取时间的问题:http://blog.csdn.net/duxinfeng2010/article/details/8653411#reply - (void)viewDidLo ...
- android 蓝牙4.0 ble,Android 蓝牙4.0开启Notification 和 Indication
______________________________________________________________ Android BLE 框架发布,功能全面,简单易用: _________ ...
最新文章
- 隐秘的角落——一个CIO的惊魂72小时
- python下载word文件-python-docx操作word文件(*.docx)
- redis 主从配置_应用 | Redis实现 主从,单例,集群,哨兵,配置应用
- linux清空文件内容的几种方式与区别
- evernote100个做笔记的好方法
- linux kill命令详解
- 带你1小时掌握Google图像语义分割模型,更有《深度学习》实体书免费送
- 怎么把打开方式改回计算机程序,电脑打开方式改变了,怎么还原
- SHELL脚本“syntax error: unexpected end of file”解决方案[半原创]
- soapui oracle groovy,SoapUI Groovy 使用实例
- gp数据库运维:远程登录 杀进程
- 【HTML5】初识前端页面结构与基本标签
- python requests 由于目标计算机积极拒绝,无法连接
- 团队协作工具,如何加强团队协作能力
- 最简单代码画的五角星
- django+javascrpt+python实现私有云盘代码
- Steam教育对儿童在幼儿园阶段概念理解
- 喻世明言 第三十一卷 闹阴司司马貌断狱(讲三国是如何开始的)
- css 隐藏滚动条 竖向y滚动,横向x不滚动
- Stripe基本介绍