写在开头

最近在弄 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 获取本地蓝牙的句柄和信息相关推荐

  1. Windows核心编程_获取鼠标指定位置的RGB颜色值

    Windows核心编程_获取鼠标指定位置的RGB颜色值 大家平常会见到很多屏幕取色工具,其原理都是获取鼠标位置的屏幕像素点颜色! 一般思路都是:获取鼠标位置,然后取出鼠标指向的屏幕像素点颜色! Get ...

  2. 蓝牙4.0、经典蓝牙、BT、BLE的关系与区别

    蓝牙3.0 比较老的标准了. 蓝牙4.0   蓝牙4.0标准是2012年推出的蓝牙标准,是蓝牙3.0的升级版本,相比3.0版本它更省电.成本更低,3毫秒低延迟.具有超长有效连接距离和AES-128加密 ...

  3. windows蓝牙编程——1 扫描周边蓝牙并获取蓝牙信息

    1 需要用到的接口 代码实现的功能:搜索周边蓝牙,并提示目标蓝牙是否被搜索到 详细说明就不写了,在这里列举一下,详细说明可以看上一篇文章.或者参考windows关于蓝牙编程API的官方说明,连接在下方 ...

  4. Windows Mobile 编程 (Win32) - 获取设备能力

    <Windows 程序设计>第五章重点讲述图形基础.首先一个示例代码是获取设备描述表信息.代码与Windows Mobile 编程 (Win32) - 输出文本中的代码类似. #inclu ...

  5. android 蓝牙4.0读写,android蓝牙4.0的知识要点

    蓝牙4.0 这次主要讲解蓝牙4.0的基本要点,作为自己的备忘录记录下来吧.首先普及一下蓝牙4.0基于Gatt协议来实现.而蓝牙4.0以下的是传统蓝牙,基于socket方式来实现.所以4.0以上的蓝牙具 ...

  6. C/C++:Windows编程—代码获取本地所有网卡信息(网卡描述,IP地址,子网掩码,MAC地址)

    先看效果 看代码 使用 GetAdaptersInfo 函数获取网卡的所有信息. MSDN函数说明 https://docs.microsoft.com/en-us/windows/desktop/a ...

  7. Android 10.0获取本地视频及其预览图

    打开本地视频选择器 private void openLocalVideo(){Intent intent = new Intent();intent.setAction(Intent.ACTION_ ...

  8. java swing 字体_Java Swing界面编程(4)---获取本地字体

    ubuntu 安装tp-link usb无线网卡 tl-wn821n 全过程 1.   无线网卡识别 在终端中输入   lsusb  ,观察插入USB无线网卡tl-wn821n,是否多显示出Realt ...

  9. iOS编程上获取本地时间以及星期几时间

    本文回复一位网友关于获取时间的问题:http://blog.csdn.net/duxinfeng2010/article/details/8653411#reply - (void)viewDidLo ...

  10. android 蓝牙4.0 ble,Android 蓝牙4.0开启Notification 和 Indication

    ______________________________________________________________ Android BLE 框架发布,功能全面,简单易用: _________ ...

最新文章

  1. 隐秘的角落——一个CIO的惊魂72小时
  2. python下载word文件-python-docx操作word文件(*.docx)
  3. redis 主从配置_应用 | Redis实现 主从,单例,集群,哨兵,配置应用
  4. linux清空文件内容的几种方式与区别
  5. evernote100个做笔记的好方法
  6. linux kill命令详解
  7. 带你1小时掌握Google图像语义分割模型,更有《深度学习》实体书免费送
  8. 怎么把打开方式改回计算机程序,电脑打开方式改变了,怎么还原
  9. SHELL脚本“syntax error: unexpected end of file”解决方案[半原创]
  10. soapui oracle groovy,SoapUI Groovy 使用实例
  11. gp数据库运维:远程登录 杀进程
  12. 【HTML5】初识前端页面结构与基本标签
  13. python requests 由于目标计算机积极拒绝,无法连接
  14. 团队协作工具,如何加强团队协作能力
  15. 最简单代码画的五角星
  16. django+javascrpt+python实现私有云盘代码
  17. Steam教育对儿童在幼儿园阶段概念理解
  18. 喻世明言 第三十一卷 闹阴司司马貌断狱(讲三国是如何开始的)
  19. css 隐藏滚动条 竖向y滚动,横向x不滚动
  20. Stripe基本介绍

热门文章

  1. 《大数据之路:阿里巴巴大数据实践》第一篇 数据技术篇-读书笔记
  2. 39个大数据可视化工具
  3. 网络安全——Cobaltstrike
  4. 热血江湖数据库MYSQL修改_热血江湖数据库修改终极教程-20070823更新
  5. 串口通信那些事儿:通信电平转换电路
  6. 向App Store提交二进制文件时报错ERROR ITMS-90096
  7. c盘压缩卷压缩不了怎么办 c盘压缩卷只能压缩一半的解决方法
  8. 怎么可以优化网站的打开速度?
  9. mathcontext保留2位小数_Java BigDecimal subtract()用法及代码示例
  10. bitbucket创建团队