背景:
当应用程序需要管理WIFI连接时,可以利用Windows Native WIFI 进行编程,近期结合QT实现了MSDN上提供的各个接口。
关于具体的Native WIFI 编程参考以下链接:
https://msdn.microsoft.com/en-us/library/windows/desktop/aa816369(v=vs.85).aspx
毕竟我是拿来主义。
具体的代码实现如下:
头文件
/*****************************************
功能: 本类利用Native wifi 编程,实现wifi连接功能,具体有以下功能:
1. 列举当前设备可用的无线接口,即无线网卡
2. 列举当前可用的无线网络
3. 查询当前连接的网络
4. 连接、断开网络
5. 实时刷新当前WIFI连接
本例中,WIFI名称和WIFI热点指同一个值
******************************************/
#ifndef Q_WINDOW_NATIVE_WIFI_H
#define Q_WINDOW_NATIVE_WIFI_H
#include <qt_windows.h>
#include <wlanapi.h>
#include <QString>
#include <QMap>
#include <QTimer>
#include <qobject.h>
#pragma comment(lib, "wlanapi.lib")
struct WifiNameAndQuality
{
WifiNameAndQuality()
{
}
WifiNameAndQuality(QString strName, int nQuality)
{
m_strName = strName;
m_nQuality = nQuality;
}
// 比较函数
bool operator()(const WifiNameAndQuality &wifi1, const WifiNameAndQuality &wifi2)
{
if (wifi1.m_nQuality > wifi2.m_nQuality)
{
return true;
}
return false;
}
// WIFI 名称
QString m_strName;
// 信号强度
int m_nQuality;
};
class QWindowNativeWifi: public QObject
{
Q_OBJECT
public:
// 获取wifi管理类
static QWindowNativeWifi *instance();
// 释放内存空间
static void release();
// 打开到服务端的连接
// 返回值: 若成功返回ERROR_SUCCESS,否则返回失败的代码
DWORD wlanOpenHandle();
// 列举当前可用的无线网卡
DWORD wlanEnumInterfaces();
// 通过WlanQueryInterface函数,查询当前接口连接的无线网络
DWORD wlanQueryInterface();
// 对某一无线网卡进行扫描,也就是重新扫描是否有可用无线网络
DWORD wlanScan();
// 列举出当前网络接口的可用无线网络
DWORD wlanGetAvailableNetworkList();
// 返回当前可用的无线网络
std::list<WifiNameAndQuality> getNets() const;
// 获取每一个WIFI配置文件
// 参数: wifiName 无线网络名称
DWORD wlanGetProfile(const QString &wifiName);
// 设置wifi的配置文件
// 参数: wifiName 无线网络名称
// strPassword 无线网络的密码
// wcProfile xml格式的配置文件
DWORD wlanSetProfile(const QString &wifiName, const QString &strPassword, const wchar_t * wcProfile = NULL);
// 删除wifi的配置文件
// 参数: wifiName 无线网络名称
DWORD wlanDeleteProfile(const QString &wifiName);
// 连接无线网络
// 参数: wifiName 无线网络名称
DWORD wlanConnect(const Q