首页 > 其他分享 >查找蓝牙WiFi功能,搜索名字并列举出来

查找蓝牙WiFi功能,搜索名字并列举出来

时间:2022-12-29 15:55:42浏览次数:66  
标签:低功耗 dwResult WiFi 蓝牙 pIfList 查找 搜索 NULL

先有一个概念,蓝牙分为普通蓝牙和低功耗(BLE)蓝牙,

低功耗蓝牙激活时信号和普通蓝牙信号一样,低功耗时必须搜索低功耗蓝牙信号

如果使用普通代码搜索,不能搜索到低功耗蓝牙信号,

例如打开手机的蓝牙功能,进入蓝牙界面,此时蓝牙是激活状态,可以搜到蓝牙信号,锁屏后蓝牙进入低功耗模式,此时搜不到蓝牙信号,其他手机电脑又是如何搜索到低功耗蓝牙的信号呢,因为他们是增加了这个功能的

他们是即搜索普通蓝牙信号又搜索低功耗蓝牙信号,把2个搜索加起来就是看到的手机蓝牙列表和电脑上的蓝牙设备列表

搜索普通蓝牙信号

public string GetAllNameSearchBluetooth()
{
    string strTemp, strBTName;
    int iBTCount = 0;
    strBTName = "";

    BluetoothRadio radio = BluetoothRadio.PrimaryRadio;  //获取自己蓝牙信息
    if (radio == null)
    {
        strBTName = "";
    }
    BluetoothClient client = new BluetoothClient();     //处理蓝牙的对象
    radio.Mode = RadioMode.Connectable;     //设置电脑蓝牙可被搜索到
    try
    {
        BluetoothDeviceInfo[] devices = client.DiscoverDevices();   //搜索蓝牙设备,10秒
        foreach (var item in devices)
        {
            iBTCount++;
            Console.WriteLine(item.DeviceName);
            strTemp = item.DeviceName + ",";
            strBTName += strTemp;
        }

        strBTName = iBTCount.ToString() + "," + strBTName;
    }
    catch (Exception ea)
    {
        strBTName = "";
    }


    return strBTName;
}

搜索低功耗蓝牙demo

https://www.wch.cn/downloads/WCHBleLib_MultiOS_ZIP.html

用 WCHBLEDLL.dll WCHBLEDLL.h WCHBLEDLL.lib 这个动态库查找低功耗蓝牙信号和普通蓝牙信号

int scanTimes = 1000, scannum = 20;
char DevIDFilter[100] = "";
CHAR bleMac[100] = "";
PCHAR mactemp = NULL;

if (!WCHBLEIsBluetoothOpened())
{
    pError = "请先打开系统蓝牙!";
    return 1;
}

memset(g_BLEDev, 0, sizeof(g_BLEDev));
WCHBLEEnumDevice(scanTimes, DevIDFilter, g_BLEDev, (ULONG*)&scannum);
CString strMsg;
scannum;//搜索到的蓝牙个数
for (int i = 0; i < scannum; ++i)
{
    memcpy(bleMac, g_BLEDev[i].DevID, 100);
    mactemp = strchr(bleMac, '-');
    g_BLEDev[i].Name;

    strMsg.Format("%s", g_BLEDev[i].Name);//名字
}

搜索WiFi信号

HANDLE hClient = NULL;
DWORD dwMaxClient = 2;
DWORD dwCurVersion = 0;
DWORD dwResult = 0;
DWORD dwRetVal = 0;
int iRet = 0;

WCHAR GuidString[39] = { 0 };

unsigned int i, j, k;
/* variables used for WlanEnumInterfaces  */

PWLAN_INTERFACE_INFO_LIST pIfList = NULL;
PWLAN_INTERFACE_INFO pIfInfo = NULL;

PWLAN_AVAILABLE_NETWORK_LIST pBssList = NULL;
PWLAN_AVAILABLE_NETWORK pBssEntry = NULL;

int iRSSI = 0;

dwResult = WlanOpenHandle(dwMaxClient, NULL, &dwCurVersion, &hClient);
if (dwResult != ERROR_SUCCESS)
{
    pError = "查找WiFi时发生错误1";
    return 1;
}

dwResult = WlanEnumInterfaces(hClient, NULL, &pIfList);
if (dwResult != ERROR_SUCCESS)
{
    pError = "查找WiFi时发生错误2";
    return 1;
}
else
{
    for (i = 0; i < (int)pIfList->dwNumberOfItems; i++)
    {
        pIfInfo = (WLAN_INTERFACE_INFO *)&pIfList->InterfaceInfo[i];
        iRet = StringFromGUID2(pIfInfo->InterfaceGuid, (LPOLESTR)&GuidString, sizeof(GuidString) / sizeof(*GuidString));
        dwResult = WlanGetAvailableNetworkList(hClient, &pIfInfo->InterfaceGuid, 0, NULL, &pBssList);
        if (dwResult != ERROR_SUCCESS)
        {
            //wprintf(L"WlanGetAvailableNetworkList failed with error: %u\n",dwResult);
            dwRetVal = 1;
            // You can use FormatMessage to find out why the function failed
            pError = "查找WiFi时发生错误3";
            return 1;
        }
        else
        {
            //获取Wlan的网卡接口数据
            dwResult = WlanEnumInterfaces(hClient, NULL, &pIfList);
            if (dwResult != ERROR_SUCCESS)
            {
                return false;
            }

            for (i = 0; i < (int)pIfList->dwNumberOfItems; i++) //遍历每个网卡
            {
                pIfInfo = (WLAN_INTERFACE_INFO*)&pIfList->InterfaceInfo[i];

                dwResult = StringFromGUID2(pIfInfo->InterfaceGuid, (LPOLESTR)&GuidString,
                    sizeof(GuidString) / sizeof(*GuidString));

                // 向无线网卡发送探测请求,WlanScan探测会在4秒内陆续更新WIFIList
                dwResult = WlanScan(hClient, (const GUID*)(&pIfInfo->InterfaceGuid), NULL, NULL, NULL);
                if (dwResult != ERROR_SUCCESS)
                {
                    return false;
                }
            }
            Sleep(5000);

            CString strTemp, strMsg;
            pBssList->dwNumberOfItems;//个数
            for (j = 0; j < pBssList->dwNumberOfItems; j++)
            {
                pBssEntry = (WLAN_AVAILABLE_NETWORK *)& pBssList->Network[j];
                if (pBssEntry->dot11Ssid.uSSIDLength == 0)
                {
                    //wprintf(L"\n");
                }
                else
                {
                    strMsg.Empty();
                    for (k = 0; k < pBssEntry->dot11Ssid.uSSIDLength; k++)
                    {
                        strTemp.Format(_T("%c"), pBssEntry->dot11Ssid.ucSSID[k]);
                        strMsg += strTemp;
                    }
                    AfxMessageBox(strMsg);//WiFi名字
                    if (j >= 50)
                    {
                        break;
                    }
                }
            }
        }
    }

}
if (pBssList != NULL)
{
    WlanFreeMemory(pBssList);
    pBssList = NULL;
}

if (pIfList != NULL)
{
      WlanFreeMemory(pIfList);
      pIfList = NULL;
}

 

 

标签:低功耗,dwResult,WiFi,蓝牙,pIfList,查找,搜索,NULL
From: https://www.cnblogs.com/ckrgd/p/17012774.html

相关文章

  • windows 根据父进程pid查找所有子进程id(C++)
    直接上代码:大家直接调用即可#include<iostream>#include<Windows.h>#include<tlhelp32.h>#include<string>#include<vector>usingnamespacestd;vector<DWORD>GetPro......
  • 蓝牙信标、智能楼宇应用国产低功耗芯片BLE5.2 PHY6252
    PHY6252是一款支持BLE5.2功能的系统级芯片(SoC),集成了低功耗的高性能多模射频收发机,搭载32位高性能低功耗处理器,提供64KretentionSRAM、可选512/256KFlash、96KBROM以及......
  • (转载)Windows 查找占用串口(COM)的进程
    原文地址:Windows查找占用串口(COM)的进程_weixin_42501466的博客-CSDN博客_如何查看串口被哪个程序占用查找占用串口的进程1、Win+R打开运行窗口2、输入regedi......
  • vba-多列同时查找满足条件的行号
    我首先想到的非环版本要做到这一点(循环简单得多),是使用匹配(),但如果你有多个值使用A=Q或同日在那里,你可能会遇到一个问题。Dimi,jasIntegeri=Application.Match(RefC......
  • 关于kali如何安装Fluxion并且WiFi钓鱼步骤超详细(我安装遇到的坑都在里面)
    前情提示WiFi钓鱼用kali首先你需要一个适配kali的无线网卡这点很重要我买的这个(绝对没有恰烂钱,毕竟人家也不给我钱,网店叫“深圳浠创科技”还有其他款式可以问客服买其他型......
  • 二分查找
    一、二分查找1.二分查找方法概述二分查找是针对有序数组的一种查找方式。是利用(letf+right)/2=mid的方式来对半缩短搜索范围的一种方法,一次查找,搜索的范围就会减半。相......
  • 算法刷题 Day 1 | 704.二分查找 & 27.移除元素
    今天是开始刷题的第一天,就像背单词书又从Abandon开始了一样,但是这次一定要坚持下来。第一天的内容是熟悉的数组,先来看第一题二分查找704.二分查找题目链接:https://leetc......
  • 二分查找(leetcode easy 704)、移除元素(leetcode easy 27)
    二分查找题目链接:https://leetcode.cn/problems/binary-search/思路:暴力法:直接遍历一边数组查找元素.此方法适用于任何数组查找.(时间复杂度O(n)、空间复杂度O(......
  • 刷刷刷Day1| LeetCode704. 二分查找,27. 移除元素
    704.二分查找LeetCode题目要求给定一个n个元素有序的(升序)整型数组nums和一个目标值target,写一个函数搜索nums中的target,如果目标值存在返回下标,否则返回-1。......
  • 二分法查找算法优化
    摘要:使用位运算和减少计算次数的技巧优化二分查找算法。在《算法——二分法查找》的二分法实现源码binarySearch_2实现中,可以发现计算了两次mid,那有没有办法计算一次呢?另......