实现功能
    无线网卡列表
    无线热点扫面
    无线连接(有密码,配置文件连接方式)
    无线断开
    重命名本地无线名(两种方式)
    删除无线配置文件
    开启和关闭无线网卡
Native Wifi 简介
    是提供给软件开发者来开发windows 无线管理的一系列API。编程人员可以通过这些函数来进行相关的无线管理,当然我们还可以通过netsh终端命令来管理,这对于非编程人员就可以简单的实现,具体可以查阅相关资料去了解。
    API如下:
无线的连接相关知识
    从windows的无线网络属性设置窗口来对比,在API编程中,同样有个配置文件来设置这些属性的,那就是profile文件,通过编写xml文件来设置相关属性。

WLAN_profile Schema Elements [xml配置文件编写格式]:

Wireless Profile Samples[无线配置文件例程]

    例如常见的路由器,安全类型为WPA2-PSK的xml配置文件如下(有密码):
    

<?xml version="1.0" encoding="US-ASCII"?>
<WLANProfile xmlns="http://www.microsoft.com/networking/WLAN/profile/v1">
    <name>SampleWPA2PSK</name>
    <SSIDConfig>
        <SSID>
            <name>SampleWPA2PSK</name>
        </SSID>
    </SSIDConfig>
    <connectionType>ESS</connectionType>
    <connectionMode>auto</connectionMode>
    <autoSwitch>false</autoSwitch>
    <MSM>
        <security>
            <authEncryption>
                <authentication>WPA2PSK</authentication>
                <encryption>AES</encryption>
                <useOneX>false</useOneX>
            </authEncryption>

<sharedKey>

<keyType>passPhrase</keyType>

<protected>false</protected>

<keyMaterial> <!-- insert key here --> </keyMaterial>

</sharedKey>

</security>
    </MSM>

</WLANProfile>
    注:

【加密类型设置】
<encryption>AES</encryption>
    【安全类型设置】
<authentication>WPAPSK</authentication>
Value Description
open Open 802.11 authentication.
shared Shared 802.11 authentication.
WPA WPA-Enterprise 802.11 authentication.
WPAPSK WPA-Personal 802.11 authentication.
WPA2 WPA2-Enterprise 802.11 authentication.
WPA2PSK WPA2-Personal 802.11 authentication.

具体功能编程实现(QTCtreator 5.xx)
    .pro文件

    LIBS+=$$quote(E:/qt/2015-4-9/WlanGetProfileTest/WlanGetProfileTest/lib/wlanapi.lib)
    LIBS+=$$quote(E:/qt/2015-4-9/WlanGetProfileTest/WlanGetProfileTest/lib/OLE32.lib)
    包含头文件
    #include<windows.h>
    #include<wlanapi.h>

  1. 程序实现(终端打印信息)
  2. #include<windows.h>
  3. #include<wlanapi.h>
  4. #include<string>
  5. #include<stdio.h>
  6. //无线连接状态
  7. intlistenStatus()
  8. {
  9. HANDLEhClient=NULL;
  10. DWORDdwMaxClient=2;
  11. DWORDdwCurVersion=0;
  12. DWORDdwResult=0;
  13. intiRet=0;
  14. WCHARGuidString[39]={0};
  15. //ListenthestatusoftheAPyouconnected.
  16. while(1){
  17. Sleep(5000);
  18. PWLAN_INTERFACE_INFO_LISTpIfList=NULL;
  19. PWLAN_INTERFACE_INFOpIfInfo=NULL;
  20. dwResult=WlanOpenHandle(dwMaxClient,NULL,&dwCurVersion,&hClient);
  21. if(dwResult!=ERROR_SUCCESS){
  22. wprintf(L"WlanOpenHandlefailedwitherror:%u\n",dwResult);
  23. return1;
  24. }
  25. //获取无线网卡列表
  26. dwResult=WlanEnumInterfaces(hClient,NULL,&pIfList);
  27. if(dwResult!=ERROR_SUCCESS){
  28. wprintf(L"WlanEnumInterfacesfailedwitherror:%u\n",dwResult);
  29. return1;
  30. }else{
  31. wprintf(L"NumEntries:%lu\n",pIfList->dwNumberOfItems);
  32. wprintf(L"CurrentIndex:%lu\n\n",pIfList->dwIndex);
  33. inti;
  34. for(i=0;i<(int)pIfList->dwNumberOfItems;i++){
  35. pIfInfo=(WLAN_INTERFACE_INFO*)&pIfList->InterfaceInfo[i];
  36. wprintf(L"InterfaceIndex[%u]:\t%lu\n",i,i);
  37. iRet=StringFromGUID2(pIfInfo->InterfaceGuid,(LPOLESTR)&GuidString,
  38. sizeof(GuidString)/sizeof(*GuidString));
  39. if(iRet==0)
  40. wprintf(L"StringFromGUID2failed\n");
  41. else{
  42. wprintf(L"InterfaceGUID[%d]:%S\n",i,GuidString);
  43. }
  44. wprintf(L"InterfaceDescription[%d]:%S",i,
  45. pIfInfo->strInterfaceDescription);
  46. wprintf(L"\n");
  47. wprintf(L"InterfaceState[%d]:\t",i);
  48. switch(pIfInfo->isState){
  49. casewlan_interface_state_not_ready:
  50. wprintf(L"Notready\n");
  51. break;
  52. casewlan_interface_state_connected:
  53. wprintf(L"Connected\n");
  54. break;
  55. casewlan_interface_state_ad_hoc_network_formed:
  56. wprintf(L"Firstnodeinaadhocnetwork\n");
  57. break;
  58. casewlan_interface_state_disconnecting:
  59. wprintf(L"Disconnecting\n");
  60. break;
  61. casewlan_interface_state_disconnected:
  62. wprintf(L"Notconnected\n");
  63. break;
  64. casewlan_interface_state_associating:
  65. wprintf(L"Attemptingtoassociatewithanetwork\n");
  66. break;
  67. casewlan_interface_state_discovering:
  68. wprintf(L"Autoconfigurationisdiscoveringsettingsforthenetwork\n");
  69. break;
  70. casewlan_interface_state_authenticating:
  71. wprintf(L"Inprocessofauthenticating\n");
  72. break;
  73. default:
  74. wprintf(L"Unknownstate%ld\n",pIfInfo->isState);
  75. break;
  76. }
  77. }
  78. }
  79. }
  80. }
  81. intmain()
  82. {
  83. HANDLEhClient=NULL;
  84. DWORDdwMaxClient=2;
  85. DWORDdwCurVersion=0;
  86. DWORDdwResult=0;
  87. PWLAN_INTERFACE_INFO_LISTpIfList=NULL;
  88. //opensaconnectiontotheserver.
  89. dwResult=WlanOpenHandle(dwMaxClient,NULL,&dwCurVersion,&hClient);
  90. if(dwResult!=ERROR_SUCCESS){
  91. wprintf(L"WlanOpenHandlefailedwitherror:%u\n",dwResult);
  92. return1;
  93. }
  94. //enumeratesallofthewirelessLANinterfacescurrentlyenabledonthelocalcomputer.
  95. dwResult=WlanEnumInterfaces(hClient,NULL,&pIfList);
  96. if(dwResult!=ERROR_SUCCESS){
  97. wprintf(L"WlanEnumInterfacesfailedwitherror:%u\n",dwResult);
  98. return1;
  99. }else{
  100. //disconnectsaninterfacefromitscurrentnetwork.
  101. dwResult=WlanDisconnect(hClient,&pIfList->InterfaceInfo[0].InterfaceGuid,NULL);//DISCONNECTFIRST
  102. if(dwResult!=ERROR_SUCCESS)
  103. {
  104. printf("WlanDisconnectfailedwitherror:%lu\n",dwResult);
  105. return-1;
  106. }
  107. //retrievethelistofavailablenetworksonawirelessLANinterface.
  108. PWLAN_AVAILABLE_NETWORK_LISTpWLAN_AVAILABLE_NETWORK_LIST=NULL;
  109. dwResult=WlanGetAvailableNetworkList(hClient,&pIfList->InterfaceInfo[0].InterfaceGuid,
  110. 0,
  111. NULL,&pWLAN_AVAILABLE_NETWORK_LIST);
  112. if(dwResult!=ERROR_SUCCESS)
  113. {
  114. printf("WlanGetAvailableNetworkListfailedwitherror:%lu\n",dwResult);
  115. WlanFreeMemory(pWLAN_AVAILABLE_NETWORK_LIST);
  116. return-1;
  117. }
  118. //connectawlan
  119. LPCWSTRprofileXml;
  120. std::wstringstrHead=
  121. L"<?xmlversion=\"1.0\"encoding=\"US-ASCII\"?>\
  122. <WLANProfilexmlns=\"http://www.microsoft.com/networking/WLAN/profile/v1\">\
  123. <name>SampleWPA2PSK</name>\
  124. <SSIDConfig>\
  125. <SSID>\
  126. <name>CJLU</name>\
  127. </SSID>\
  128. </SSIDConfig>\
  129. <connectionType>ESS</connectionType>\
  130. <connectionMode>auto</connectionMode>\
  131. <autoSwitch>false</autoSwitch>\
  132. <MSM>\
  133. <security>\
  134. <authEncryption>\
  135. <authentication>WPA2PSK</authentication>\
  136. <encryption>AES</encryption>\
  137. <useOneX>false</useOneX>\
  138. </authEncryption>\
  139. <sharedKey>\
  140. <keyType>passPhrase</keyType>\
  141. <protected>false</protected>\
  142. <keyMaterial>5566778899</keyMaterial>\
  143. </sharedKey>\
  144. </security>\
  145. </MSM>\
  146. </WLANProfile>";
  147. profileXml=strHead.c_str();
  148. WLAN_REASON_CODEWlanreason;
  149. //如果<connectionMode>auto</connectionMode>,为自动连接,则下面的一步可以连接上无线
  150. dwResult=WlanSetProfile(hClient,
  151. &(pIfList->InterfaceInfo[0].InterfaceGuid),
  152. 0,profileXml,NULL,TRUE,NULL,&Wlanreason);
  153. if(ERROR_SUCCESS!=dwResult)
  154. {
  155. printf("wlansetprofilefailed%lu.\r\n",dwResult);
  156. }
  157. //删除无线配置文件
  158. /*
  159. LPCWSTRprofileName;
  160. LPCWSTRnewProfileName;
  161. std::wstringstrprofileName=L"SampleWPA2PSK";
  162. std::wstringstrNewProfileName=L"test";
  163. profileName=strprofileName.c_str();
  164. newProfileName=strNewProfileName.c_str();
  165. dwResult=WlanDeleteProfile(hClient,
  166. &(pIfList->InterfaceInfo[0].InterfaceGuid),
  167. profileName,NULL);
  168. if(ERROR_SUCCESS!=dwResult)
  169. {
  170. printf("wlandeleteprofilefailed%lu.\r\n",dwResult);
  171. }
  172. */
  173. /*
  174. //重命名无线配置文件,其实只是新建了一个配置文件,并无重命名(更改了wlanapi.h,将此函数换了条件编译位置)
  175. dwResult=WlanRenameProfile(hClient,
  176. &(pIfList->InterfaceInfo[0].InterfaceGuid),
  177. profileName,
  178. newProfileName,
  179. NULL
  180. );
  181. if(ERROR_SUCCESS!=dwResult)
  182. {
  183. printf("wlanRenameprofilefailed%lu.\r\n",dwResult);
  184. }
  185. */
  186. //网卡关闭和开启(关闭了,就开不了了,除非获取了InterfaceGuid
  187. //然后可以关闭再开启。用fn+F2手动开启)
  188. WLAN_PHY_RADIO_STATEstate;
  189. state.dwPhyIndex=0;
  190. state.dot11SoftwareRadioState=dot11_radio_state_on;
  191. PVOIDpData=&state;
  192. dwResult=WlanSetInterface(hClient,&pIfList->InterfaceInfo[0].InterfaceGuid,
  193. wlan_intf_opcode_radio_state,sizeof(WLAN_PHY_RADIO_STATE),pData,NULL);
  194. if(dwResult!=ERROR_SUCCESS)
  195. {
  196. wprintf(L"setstatefailed!erris%d\n",dwResult);
  197. }
  198. }
  199. dwResult=WlanCloseHandle(hClient,NULL);
  200. if(dwResult!=ERROR_SUCCESS)
  201. {
  202. wprintf(L"WlanCloseHandlefailed%lu.\r\n",dwResult);
  203. }
  204. listenStatus();
  205. if(pIfList!=NULL){
  206. WlanFreeMemory(pIfList);
  207. pIfList=NULL;
  208. }
  209. return0;
  210. }

http://blog.csdn.net/freeape/article/details/45954309

QT---Native Wifi functions 应用(WiFi有密码连接)的更多相关文章

  1. iOS能否自动扫描周边wifi信息并通过密码连接

    能否获取系统wifi列表信息 不能,只能获取用户当前连接的wifi信息 https://developer.apple.com/forums/thread/112177 https://develop ...

  2. 小程序升级实时音视频录制及播放能力,开放 Wi-Fi、NFC(HCE) 等硬件连接功能

    “ 小程序升级实时音视频录制及播放能力,开放 Wi-Fi.NFC(HCE) 等硬件连接功能.同时提供按需加载.自定义组件和更多访问层级等新特性,增强了第三方平台的能力,以满足日趋丰富的业务需求.” 0 ...

  3. atitit.无线上网卡 无法搜索WiFi 解决无线路由器信号不能被连接

    atitit.无线上网卡 无法搜索WiFi 解决无线路由器信号不能被连接 #---现象 pc机无线网卡无法搜索到无线路由器的信号.. 但是,笔记本电脑和手机能够... 只要pc机无线网卡可以搜索信号, ...

  4. C#共享WIFI能通过代码控制给连接的移动端分配IP么

    用C#创建了一个虚拟WIFI,但是能不能通过代码来给连接上的移动端分配各自的IP.之前都是自动分配的IP.望大神们赐教 C#共享WIFI能通过代码控制给连接的移动端分配IP么 >> csh ...

  5. 实时双频Wi-Fi如何实现下一代车内连接

    实时双频Wi-Fi如何实现下一代车内连接 How real simultaneous dual band Wi-Fi enables next-generation in-vehicle connec ...

  6. 第15.19节 PyQt(Python+Qt)入门学习:自定义信号与槽连接

    老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 一.引言 本文利用中介绍了PyQt中的信号和槽机制,除了使用PyQt组件的已有信号外,PyQt和Qt ...

  7. 在Wifi网络中嗅探明文密码(HTTP POST请求、POP等)

    全世界,现在大约50%的网站没有使用SSL加密,天朝尤其多. 我们都知道通过HTTP发送的数据都是明文,没有使用任何加密,即使是在数据敏感的登录页面. 本文的目的是:如果你在不熟悉的网络环境中,要注意 ...

  8. 无线渗透--wifiphisher之wifi钓鱼获取wifi密码

    本来是想试验一下暴力破解的,但是由于字典太大,跑的时间也比较长,于是使用了钓鱼的方法. 先说一下wifiphisher钓鱼获取wifi密码的原理: wifiphisher对于你在攻击中选定的wifi会 ...

  9. 在linux,arm上的屏幕搜索wifi并连接(qt,多选择,wifi按信号排列)转

    先上代码!! #include "widget.h"#include "ui_widget.h"#include <QVBoxLayout>#inc ...

随机推荐

  1. boost::any在降低模块之间耦合性的应用

    作者:朱金灿 来源:http://blog.csdn.net/clever101 在开发大型系统中,遵循这样一个原则:模块之间低耦合,模块内高内聚.比如系统中模块有界面模块和算法模块两种,一般是界面模 ...

  2. 第三方微信支付,WAP、H5、APP、公众号支付的区别

    你说一个微信支付被腾讯搞了N个版本出来,是技术问题还收费原因不得而知.公众号支付,H5(wap)支付,APP支付.看得小编一头雾水. 带点N个疑问? 1.公众号支付是在公众号里支付,支众号里引入的三方 ...

  3. windows 下使用 virtualenv 创建虚拟环境

    virtualenv虚拟环境为每个项目隔离了一套运行类库,不同的项目在各自的虚拟环境中使用不同的类库,避免了将所有类库都安装到系统环境中导致的不同项目需要不同(版本)类库的问题,项目与项目之间的类库依 ...

  4. 阿里云centos7.2自己安装mysql5.7远程不能访问解决方案

    版权声明:转载也行 https://blog.csdn.net/u010955892/article/details/72774920 最近,无意中看到阿里云服务器降价,所以一时手痒,买了一年的服务器 ...

  5. 【14.94%】【codeforces 611E】New Year and Three Musketeers

    time limit per test2 seconds memory limit per test256 megabytes inputstandard input outputstandard o ...

  6. Android Studio官方文档: 如何在你的设备上运行你的程序

    在实体设备上运行您的应用 设置您的设备,如下所示: 使用一根 USB 电缆将您的设备连接到您的开发机器. 如果您是在 Windows 上开发,可能需要为您的设备安装相应的 USB 驱动程序.如需帮助安 ...

  7. React Native细节记录

    1.环境搭建部分 安装完node后建议设置npm镜像以加速后面的过程(或使用***工具).注意:不要使用cnpm!cnpm安装的模块路径比较奇怪,packager不能正常识别! npm config ...

  8. matlab 小波处理工具箱

    1. wavedec:多尺度(multilevel)一维小波分解 [C,L] = wavedec(X,N,'wname') [C,L] = wavedec(X,N,Lo_D,Hi_D) 返回值 L(b ...

  9. 解决eclipse中找不到jar包问题

    当使用eclipse导入外部的web工程时,有时会提示HttpServletRequest, ServletActionContext找不到的情况,解决办法: (注:我已经引用了struts2的jar ...

  10. Qt控件焦点切换

    们日常切换控件,例如QQ登陆的账号和密码输入框就可以通过Tab键切换焦点.  图1 qq切换焦点 Qt中QWidget提供了一个静态方式实现该效果 其中也包含介绍使用 [static] void QW ...