1 需要用到的接口

代码实现的功能:搜索周边蓝牙,并提示目标蓝牙是否被搜索到
详细说明就不写了,在这里列举一下,详细说明可以看上一篇文章。或者参考windows关于蓝牙编程API的官方说明,连接在下方:
https://docs.microsoft.com/zh-cn/windows/win32/api/BluetoothAPIs

1.1 BLUETOOTH_DEVICE_SEARCH_PARAMS 蓝牙搜索条件结构体

typedef struct _BLUETOOTH_DEVICE_SEARCH_PARAMS {DWORD  dwSize;BOOL   fReturnAuthenticated;BOOL   fReturnRemembered;BOOL   fReturnUnknown;BOOL   fReturnConnected;BOOL   fIssueInquiry;UCHAR  cTimeoutMultiplier;HANDLE hRadio;
} BLUETOOTH_DEVICE_SEARCH_PARAMS;

1.2 BLUETOOTH_DEVICE_INFO 蓝牙设备信息

typedef struct _BLUETOOTH_DEVICE_INFO {DWORD             dwSize;BLUETOOTH_ADDRESS Address;ULONG             ulClassofDevice;BOOL              fConnected;BOOL              fRemembered;BOOL              fAuthenticated;SYSTEMTIME        stLastSeen;SYSTEMTIME        stLastUsed;WCHAR             szName[BLUETOOTH_MAX_NAME_SIZE];
} BLUETOOTH_DEVICE_INFO_STRUCT;

1.3 用到的函数

1.3.1 BluetoothFindFirstDevice

HBLUETOOTH_DEVICE_FIND BluetoothFindFirstDevice(const BLUETOOTH_DEVICE_SEARCH_PARAMS *pbtsp,BLUETOOTH_DEVICE_INFO                *pbtdi
);

1.3.2 BluetoothFindNextDevice

BOOL BluetoothFindNextDevice(HBLUETOOTH_DEVICE_FIND hFind,BLUETOOTH_DEVICE_INFO  *pbtdi
);

2 实现代码

2.1 用到的头文件

头文件部分是我用到全的部分,后续也一直用的这部分头文件

#pragma once
#include <iostream>
#include <iomanip>
#include <sstream>// 蓝牙API需要的头文件
#include <afxtempl.h>
#include <BluetoothAPIs.h>
#include <bthdef.h>
#include <bthsdpdef.h>
#include <ws2bth.h>
#include <WinSock2.h>
#include <string>
#include <string.h>#include <winspool.h>   // 获取串口列表所需#pragma comment(lib,"Irprops.lib")

2.2 实现代码

int scanRemoteBluetooth(HANDLE p_local_bluetooth, string bluetooths[],int length)
{/*p_local_bluetooth  本地蓝牙句柄bluetooths         蓝牙名称 string 列表length             蓝牙名称列表的有效长度*/// 蓝牙搜索条件结构体BLUETOOTH_DEVICE_SEARCH_PARAMS bdsp = { sizeof(bdsp) };bdsp.fReturnAuthenticated = 1;   // 返回经过身份验证的蓝牙设备bdsp.fReturnRemembered = 1;      // 返回记住的蓝牙设备bdsp.fReturnUnknown = 1;         // 返回未知的蓝牙设备bdsp.fReturnConnected = 1;       // 返回已连接的蓝牙设备bdsp.fIssueInquiry = 1;          // 发出新一轮的查询bdsp.cTimeoutMultiplier = 30;    // 1.28s的增量,1.28 * 20bdsp.hRadio = p_local_bluetooth; // 有效的本地蓝牙句柄,如果是NULL,在所有本地蓝牙无线电上进行查询// 蓝牙设备结构体BLUETOOTH_DEVICE_INFO bdi[20];for (int i = 0; i < 20; i++) {bdi[i].dwSize = sizeof(bdi[i]);}// 搜索周边第一个蓝牙设备HBLUETOOTH_DEVICE_FIND hdf = BluetoothFindFirstDevice(&bdsp, &bdi[0]);    // 返回的hdf 句柄留给 BluetoothFindNextDevice使用if (hdf == NULL) {cout << "获取句柄失败" << endl;return -1;}int count = 0;do {// 如果扫到了第一个蓝牙设备string bluetooth_name = wideChar2string(bdi[count].szName);for (int i = 0; i < length; i++) {if (bluetooth_name == bluetooths[i]) {remote_bluetooth.Add(bdi[count]);}}count++;} while (BluetoothFindNextDevice(hdf, &bdi[count]));// 对比 remote_bluetooth 和 bluetooths 的长度,搜索到所有目标蓝牙if (remote_bluetooth.GetCount() == length) {cout << "匹配完成" << endl;for (int i = 0; i < remote_bluetooth.GetCount(); i++) {wcout << remote_bluetooth[i].szName << endl;}return 0;}// 没有所有到所有目标蓝牙,将没有搜索到的打印出来else {// 第一层循环:遍历所有目标蓝牙的名字for (int i = 0; i < length; i++) {string temp_name = bluetooths[i];int sign = 0;        // 匹配到是1,没匹配到是0// 第二层循环:遍历匹配到的蓝牙数组for (int j = 0; j < remote_bluetooth.GetCount(); j++) {string t = wideChar2string(remote_bluetooth[j].szName);if (t == temp_name) {sign = 1;}}if (sign == 0) {cout << "未能匹配到:" << temp_name << endl;}if (sign == 1) {cout << "匹配到:" << temp_name << endl;}}return -1;}return -1;
};

windows蓝牙编程——1 扫描周边蓝牙并获取蓝牙信息相关推荐

  1. python自动化扫描,多线程枚举获取wifi信息,让你走在任何一个地方都能上网

    python自动化扫描,多线程枚举获取wifi信息,让你走在任何一个地方都能上网. 无线网络在无线局域网的范畴是指"无线相容性认证",实质上是一种商业认证,同时也是一种无线联网技术 ...

  2. Windows核心编程_在Visual Studio窗口输出调试信息

    OutputDebugString 该函数会将打印信息输出到VS输出窗口中 注意是输出窗口 但是它只支持一个参数 同时还要OutputDebugStringA和OutputDebugStringW分别 ...

  3. Windows逆向分析实战:使用CE+OD获取用户信息

    序: 很多想学软件逆向分析的朋友们,初学者往往看到一大堆的技术资料,直接就懵了.本文以一个简单的例子,演示一下使用CE+OD进行内存的获取,然后使用Qt进行界面显示,让初学者简单了解逆向分析的流程,并 ...

  4. 使用手机软件Bluino Loader通过蓝牙编程、烧录Arduino

    前言 一些小伙伴或许因为没有电脑又想学习Arduino而犯愁,但是在这片文章中我将会带领大家来完美解决这个问题,我们将使用手机软件Bluino Loader通过蓝牙编程.烧录Arduino 材料 硬件 ...

  5. 菜鸟哥玩蓝牙Ble4.0系列 ESP32初玩篇① Scan —— 扫描周边蓝牙,了解BLE扫描的方方面面

    文章目录 1.前言 2.ESP32 Scan案例 2.1 直接打开官方示例 3.Scan核心库 -- BLEScan 3.1 管理扫描 3.1.1 创建扫描对象 -- BLEScan 3.1.1.1 ...

  6. c++ windows 蓝牙库_c++中蓝牙编程的库类

    展开全部 安装PSDK就可以用了62616964757a686964616fe59b9ee7ad9431333330343239,之前有写过一个类在MFC里面调用,并能成功与蓝牙手机通信,只不过是非标 ...

  7. 基于BlueZ的C语言蓝牙编程

    hci_inquiry()   //查询周围蓝牙设备并获取其地址 sdp_connect()   //链接到蓝牙设备的sdp服务器 sdp_list_append()  //添加sdp查询列表项 sd ...

  8. android蓝牙编程资料搜集

    Android平台支持蓝牙网络协议栈,实现蓝牙设备之间数据的无线传输. 本文档描述了怎样利用android平台提供的蓝牙API去实现蓝牙设备之间的通信,蓝牙设备之间的通信主要包括了四个步骤:设置蓝牙设 ...

  9. linux c 蓝牙开发环境,基于BlueZ的C语言蓝牙编程

    原文出处: 第四章 基于BlueZ的C语言蓝牙编程 有很多理由促使我们选用C替代其他高级语言来例如Python来开发蓝牙应用程序.Python环境可能并不适合于嵌入式系统.因为嵌入式系统对程序的大 小 ...

最新文章

  1. Go 学习笔记(47)— Go 标准库之 strconv(string/int 互相转换、Parse 字符串转换为指定类型、Format 指定类型格式化为字符串)
  2. 五大经常使用算法 之 动态规划法
  3. 程序如何调堆内存_Java的内存泄漏
  4. SAP Spartacus ConfigInitializerService里的isStable属性
  5. flex布局_Flex布局,真香
  6. mysql加索引快很多
  7. 1.4 编程基础之逻辑表达式与条件分支 16 三角形判断
  8. python组合数据类型实验_Python程序设计实验报告七:组合数据类型
  9. 领域驱动设计最佳实践
  10. golang基础-WaitGroup、kafka消费者
  11. 例子:10秒后同意按钮可点击
  12. 封装ajaxGetJs
  13. Java的Number和Math类
  14. java soap_Java使用SOAP协议访问webservice接口
  15. 计算机电路板工作原理,电磁炉万能电路板工作原理(图)
  16. 2022 CNCC 中国计算机大会参会总结
  17. 学习 opencv---(4) 分离颜色通道 多通道混合
  18. Text to image论文精读 NAAF:基于负感知注意力的图像-文本匹配框架 Negative-Aware Attention Framework for Image-Text Matching
  19. 【T+】畅捷通T+存货档案批量修改存货属性
  20. oracle 查看表空间使用情况

热门文章

  1. 上项线体表位置_LPL退役选手总结最难打的四个位置:TES辅助RNG上单在列
  2. python爬取微博话题下面的帖子并存入excel文件
  3. HyperLPR车牌识别技术算法之车牌精定位
  4. html前端的几种加密/解密方式
  5. SIP/VoIP之常见的语音问题
  6. js中break和continue的区别
  7. 路由器,交换机的存储介质的区别
  8. 详解美股中的几种交易单-限价单、市价单、止损单、止损限价单、跟踪止损单
  9. 软硬结合——写给硬件开发工程师的全栈入门实战
  10. Linux下的酷我音乐盒(开源非官方)