C++程序中使用Windows系统Native Wifi API的基本教程

2020-01-06 14:45:31丽君
易采站长站为您分析C++程序中使用Windows系统Native Wifi API的基本教程,包括在程序中控制无线网卡开关的方法,需要的朋友可以参考下  

Windows应用想要实现连接wifi,监听wifi信号,断开连接等功能,用NativeWifi API是个不错的选择。

打开MSDN,搜索NativeWifi Api,找到Native Wifi页。在这里。

信息量很大,如果像我着急实现上述功能,看海量的文档有些来不及。如果直接给我例子,在运行中调试,阅读代码,效率会更高。
但是,我并没有成功。首先,Sample在SDK中,参见这里。我下载几次都失败了,最后放弃这条路。后来同事给了我一份Sample,我不敢确定是否就是这个,但是代码写的也是很晦涩。我的初衷是简单的使用这些API的例子。

看来还是自己动手吧。看相关API,如果不懂,就找有经验人的例子。

几经周折,终于实现我的需求。让我慢慢道来。
1.获得可用AP列表
参见WlanGetAvailableNetworkList的官方文档,下面有例子。


DWORD WINAPI WlanGetAvailableNetworkList( 
 _In_  HANDLE hClientHandle, 
 _In_  const GUID *pInterfaceGuid, 
 _In_  DWORD dwFlags, 
 _Reserved_ PVOID pReserved, 
 _Out_  PWLAN_AVAILABLE_NETWORK_LIST *ppAvailableNetworkList 
); 

由可用列表便可以找到当前哪个AP正在连接,并显示信号强度。
2.监听当前连接
在获得可用AP列表的基础上,遍历当前AP,看谁正在连接,并取得它的信号。代码片段如下:


bool isConnect = false; 
int numberOfItems = pWLAN_AVAILABLE_NETWORK_LIST->dwNumberOfItems; 
  for(int i = 0; i <= numberOfItems; i++) 
  { 
   WLAN_AVAILABLE_NETWORK wlanAN = pWLAN_AVAILABLE_NETWORK_LIST->Network[i]; 
   if(wlanAN.dwFlags & WLAN_AVAILABLE_NETWORK_CONNECTED) 
   { 
    Wprintf(WLAN signal is %s:%dn", wlanAN.strProfileName, wlanAN.wlanSignalQuality); 
    isConnect = true;     
   } 
  } 
  if(!isConnect){    
 wprintf("Wifi is disconnected!n");} 

3.断开连接
如果wifi处于连接状态,将其断开。WlanDisconnect还是容易使用的。原型如下:


DWORD WINAPI WlanDisconnect( 
 _In_  HANDLE hClientHandle, 
 _In_  const GUID *pInterfaceGuid, 
 _Reserved_ PVOID pReserved 
); 

代码演示在后面。
4.连接一个有profile的AP(已保存过密码)
这是本文的重点。
虽然连接函数WlanConnect原型很简单:


DWORD WINAPI WlanConnect( 
 _In_  HANDLE hClientHandle, 
 _In_  const GUID *pInterfaceGuid, 
 _In_  const PWLAN_CONNECTION_PARAMETERS pConnectionParameters, 
 _Reserved_ PVOID pReserved 
);