博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Turn on/turn off BlueTooth Radio mode in Windows CE(如何在wince中设置蓝牙的无线模式,以使其可被查找到)
阅读量:2351 次
发布时间:2019-05-10

本文共 1855 字,大约阅读时间需要 6 分钟。

     最近发现,公司的设备,不能被相互查找到,我试了几台,发现确实如此,想了想,猜测可能没有设置蓝牙的可查找状态,以至于不能被其他设备找到,由于最近也比较忙,就没有时间去解决它。

     昨天,台湾那边又提到这个问题,所以就只好抽时间去看这个问题。因为是猜测,所以就需要证明是这个原因,在网上下载了一个wince下可以运行的蓝牙应用程序,当我设置可被其他设备查找时,之前不能被查到的设备,就可以正常被查找到,看来确实是这个问题。然后就去看蓝牙相关的文档和动态链接库,看有没有函数可以实现。很容易就能找到BthGetMode和BthSetMode这两个函数,但是写好测试代码的时候,编译的时候,却说没有这个头文件(bthutil.h),也没有lib(bthutil.lib),很郁闷。文档说CE6已经对他支持了,但就是不能用。上网寻找帮助,发现很多人都有相同的疑问,但却没有一个可行的方法。

 

   接下来我就想,如果没有对这两个函数支持的话,就自己去实现一个,看了btd.dll和btdrt.dll 导出的接口函数,发现几个比较可能有帮助的函数:BthGetCurrentMode、BthReadScanEnableMask、BthWriteScanEnableMask。然后就一个个看文档,觉得后两个应该有帮助,但是对文档上的理解的不够透彻,使得拿到的这几个可能有帮助的函数,现在也没有多大用处。后来在网上看到一个博客对这方面有描述,和我想的比较相近,但是终究不是自己搞出来的。链接地址:http://www.cnblogs.com/procoder/archive/2009/05/11/1454396.html

受到启发。于是也就照猫画虎,自己写了两个函数。

int BthGetMode(int& mode)

{
    HMODULE hM = LoadLibrary(L"btdrt.dll");
    if (hM == NULL)
    {
        return ERROR_INVALID_HANDLE;

    }

    pfuncBthReadScanEnableMask pBthReadScanEnableMask =          (pfuncBthReadScanEnableMask)GetProcAddress(hM,L"BthReadScanEnableMask");
    unsigned char mask = 0;
    int iRet = pBthReadScanEnableMask(&mask);
    switch(mask)
    {
    case 0x0:
        mode = BTH_POWER_OFF;
        break;
    case 0x2:
        mode = BTH_CONNECTABLE;
        break;
    case 0x3:
        mode = BTH_DISCOVERABLE;
        break;
    default:
        break;
    }
    FreeLibrary(hM);
    return iRet;
}

 

int BthSetMode(int mode)

{
    HMODULE hM = LoadLibrary(L"btdrt.dll");
    if (hM == NULL)
    {
       return ERROR_INVALID_HANDLE;
    }
    pfuncBthWriteScanEnableMask pBthWriteScanEnableMask = (pfuncBthWriteScanEnableMask)GetProcAddress(hM,L"BthWriteScanEnableMask");
    unsigned char mask = 0;
    switch(mode)
    {
    case BTH_POWER_OFF:
        mask = 0x0;
        break;
    case BTH_CONNECTABLE:
        mask = 0x2;
        break;
    case BTH_DISCOVERABLE:
        mask = 0x3;
        break;
    default:
        break;
    }
    int iRet = pBthWriteScanEnableMask(mask);
    FreeLibrary(hM);
    return iRet;
}

  这样就可以利用上面实现的两个函数来设置蓝牙的radio mode。

现在的情况就是经常能够很快的定位问题出现在什么地方,但是解决问题却并不那么容易。在网上看到很多人在应用开发方面都在用C#,虽然我不是做应用开发的,还是有必要去学习C#,实现一些有意思的小程序。学习应用程序的开发!

你可能感兴趣的文章
选择排序(分析+代码调优)
查看>>
Docker
查看>>
代码优化建议,44条代码优化细节
查看>>
快速排序(图解分析+代码调优)
查看>>
Java基础面试总结
查看>>
HashMap遍历几种方式比较(传统的Map迭代方式对比JDK8的迭代方式)
查看>>
Java面试& HashMap实现原理分析
查看>>
PS修改动图字幕
查看>>
八大基础排序总结
查看>>
Linux下安装使用FastDFS
查看>>
后台管理系统之品牌管理
查看>>
后台管理系统之商品规格管理
查看>>
后台管理系统之商品管理
查看>>
商品详情及Thymeleaf静态化
查看>>
如何安装最纯净的Windows系统,玩转重装操作系统
查看>>
RabbitMQ安装使用及数据同步
查看>>
用户中心
查看>>
授权中心
查看>>
乐优商城—购物车
查看>>
乐优商城—订单微服务
查看>>