SimpleWifi 是一个优秀的C#开发库,用于简化WiFi网络的管理操作。本文将详细介绍其使用方法和实际应用场景。
首先需要通过NuGet安装SimpleWifi包:
BashInstall-Package SimpleWifi.netstandard.Lsh
C#using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using SimpleWifi;
namespace AppSimpleWifi
{
public class WifiManager
{
private Wifi wifi;
public WifiManager()
{
// 初始化WiFi对象
wifi = new Wifi();
// 注册状态变化事件
wifi.ConnectionStatusChanged += Wifi_ConnectionStatusChanged;
}
// WiFi状态变化事件处理
private void Wifi_ConnectionStatusChanged(object sender, WifiStatusEventArgs e)
{
Console.WriteLine($"WiFi状态发生变化: {e.NewStatus}");
}
}
}
C#/// <summary>
/// 扫描并获取所有可用的WiFi网络
/// </summary>
public List<AccessPoint> ScanNetworks()
{
try
{
// 获取所有可用的接入点
var accessPoints = wifi.GetAccessPoints();
Console.WriteLine($"找到 {accessPoints.Count} 个WiFi网络:");
foreach (var ap in accessPoints)
{
Console.WriteLine($"SSID: {ap.Name}");
Console.WriteLine($"信号强度: {ap.SignalStrength}%");
Console.WriteLine($"是否加密: {ap.IsSecure}");
Console.WriteLine("------------------------");
}
return accessPoints.ToList();
}
catch (Exception ex)
{
Console.WriteLine($"扫描网络时出错: {ex.Message}");
return new List<AccessPoint>();
}
}
C#/// <summary>
/// 连接到指定的WiFi网络
/// </summary>
/// <param name="ssid">网络名称</param>
/// <param name="password">网络密码</param>
/// <returns>连接结果</returns>
public async Task<bool> ConnectToNetwork(string ssid, string password)
{
try
{
// 获取所有接入点
var accessPoints = wifi.GetAccessPoints();
// 查找指定的网络
var targetNetwork = accessPoints.FirstOrDefault(ap => ap.Name == ssid);
if (targetNetwork == null)
{
Console.WriteLine($"未找到网络: {ssid}");
return false;
}
// 创建认证信息
AuthRequest authRequest = new AuthRequest(targetNetwork);
// 设置密码
authRequest.Password = password;
// 尝试连接
bool connected = targetNetwork.Connect(authRequest);
if (connected)
{
Console.WriteLine($"成功连接到 {ssid}");
}
else
{
Console.WriteLine($"连接到 {ssid} 失败");
}
return connected;
}
catch (Exception ex)
{
Console.WriteLine($"连接过程中出错: {ex.Message}");
return false;
}
}
C#/// <summary>
/// 断开当前WiFi连接
/// </summary>
public void DisconnectNetwork()
{
try
{
if (wifi.ConnectionStatus == WifiStatus.Connected)
{
wifi.Disconnect();
Console.WriteLine("已断开WiFi连接");
}
else
{
Console.WriteLine("当前没有活动的WiFi连接");
}
}
catch (Exception ex)
{
Console.WriteLine($"断开连接时出错: {ex.Message}");
}
}
C#using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using SimpleWifi;
namespace AppSimpleWifi
{
public class WifiMonitor
{
private Wifi wifi;
private Timer monitorTimer;
public WifiMonitor()
{
wifi = new Wifi();
// 创建定时器,每5秒检查一次信号强度
monitorTimer = new Timer(MonitorSignalStrength, null, 0, 5000);
}
/// <summary>
/// 监控当前连接的WiFi信号强度
/// </summary>
private void MonitorSignalStrength(object state)
{
try
{
if (wifi.ConnectionStatus == WifiStatus.Connected)
{
var currentNetwork = wifi.GetAccessPoints()
.FirstOrDefault(ap => ap.IsConnected);
if (currentNetwork != null)
{
Console.WriteLine($"当前网络: {currentNetwork.Name}");
Console.WriteLine($"信号强度: {currentNetwork.SignalStrength}%");
// 信号强度过低时发出警告
if (currentNetwork.SignalStrength < 30)
{
Console.WriteLine("警告:WiFi信号较弱!");
}
}
}
}
catch (Exception ex)
{
Console.WriteLine($"监控信号强度时出错: {ex.Message}");
}
}
public void Dispose()
{
monitorTimer?.Dispose();
}
}
}
C#/// <summary>
/// 保存网络配置
/// </summary>
public void SaveNetworkProfile(string ssid, string password)
{
try
{
var accessPoint = wifi.GetAccessPoints()
.FirstOrDefault(ap => ap.Name == ssid);
if (accessPoint != null)
{
var authRequest = new AuthRequest(accessPoint);
authRequest.Password = password;
accessPoint.Connect(authRequest);
Console.WriteLine($"已保存网络配置: {ssid}");
}
}
catch (Exception ex)
{
Console.WriteLine($"保存网络配置时出错: {ex.Message}");
}
}
下面是一个综合性的WiFi管理器示例:
C#public class CompleteWifiManager : IDisposable
{
private readonly Wifi wifi;
private readonly Timer statusCheckTimer;
public CompleteWifiManager()
{
wifi = new Wifi();
// 每10秒检查一次WiFi状态
statusCheckTimer = new Timer(CheckWifiStatus, null, 0, 10000);
// 注册事件
wifi.ConnectionStatusChanged += Wifi_ConnectionStatusChanged;
}
/// <summary>
/// 获取WiFi适配器状态
/// </summary>
public bool IsWifiEnabled()
{
return wifi.ConnectionStatus != WifiStatus.Unavailable;
}
/// <summary>
/// 扫描并获取可用网络
/// </summary>
public List<NetworkInfo> GetAvailableNetworks()
{
var networks = wifi.GetAccessPoints()
.Select(ap => new NetworkInfo
{
SSID = ap.Name,
SignalStrength = ap.SignalStrength,
IsSecure = ap.IsSecure,
IsConnected = ap.IsConnected
})
.ToList();
return networks;
}
/// <summary>
/// 连接到指定网络
/// </summary>
public async Task<bool> ConnectToNetwork(string ssid, string password, bool saveProfile = false)
{
try
{
var accessPoint = wifi.GetAccessPoints()
.FirstOrDefault(ap => ap.Name == ssid);
if (accessPoint == null)
return false;
var authRequest = new AuthRequest(accessPoint)
{
Password = password,
SavePassword = saveProfile
};
return accessPoint.Connect(authRequest);
}
catch (Exception ex)
{
Console.WriteLine($"连接网络时出错: {ex.Message}");
return false;
}
}
/// <summary>
/// 获取当前连接的网络信息
/// </summary>
public NetworkInfo GetCurrentNetwork()
{
var connectedAp = wifi.GetAccessPoints()
.FirstOrDefault(ap => ap.IsConnected);
if (connectedAp == null)
return null;
return new NetworkInfo
{
SSID = connectedAp.Name,
SignalStrength = connectedAp.SignalStrength,
IsSecure = connectedAp.IsSecure,
IsConnected = true
};
}
private void CheckWifiStatus(object state)
{
try
{
var currentNetwork = GetCurrentNetwork();
if (currentNetwork != null)
{
Console.WriteLine($"当前网络状态:");
Console.WriteLine($"SSID: {currentNetwork.SSID}");
Console.WriteLine($"信号强度: {currentNetwork.SignalStrength}%");
}
}
catch (Exception ex)
{
Console.WriteLine($"检查WiFi状态时出错: {ex.Message}");
}
}
private void Wifi_ConnectionStatusChanged(object sender, WifiStatusEventArgs e)
{
Console.WriteLine($"WiFi连接状态变更: {e.NewStatus}");
}
public void Dispose()
{
statusCheckTimer?.Dispose();
wifi?.Dispose();
}
}
/// <summary>
/// 网络信息数据模型
/// </summary>
public class NetworkInfo
{
public string SSID { get; set; }
public int SignalStrength { get; set; }
public bool IsSecure { get; set; }
public bool IsConnected { get; set; }
}
C#class Program
{
static async Task Main(string[] args)
{
using (var wifiManager = new CompleteWifiManager())
{
// 检查WiFi是否可用
if (!wifiManager.IsWifiEnabled())
{
Console.WriteLine("WiFi适配器不可用");
return;
}
// 获取可用网络列表
var networks = wifiManager.GetAvailableNetworks();
Console.WriteLine("可用网络:");
foreach (var network in networks)
{
Console.WriteLine($"SSID: {network.SSID}, 信号强度: {network.SignalStrength}%");
}
// 连接到指定网络
Console.WriteLine("请输入要连接的网络名称:");
string ssid = Console.ReadLine();
Console.WriteLine("请输入密码:");
string password = Console.ReadLine();
bool connected = await wifiManager.ConnectToNetwork(ssid, password, true);
if (connected)
{
Console.WriteLine("连接成功!");
// 显示当前网络信息
var currentNetwork = wifiManager.GetCurrentNetwork();
Console.WriteLine($"当前连接到: {currentNetwork.SSID}");
Console.WriteLine($"信号强度: {currentNetwork.SignalStrength}%");
}
else
{
Console.WriteLine("连接失败!");
}
Console.WriteLine("按任意键退出...");
Console.ReadKey();
}
}
}
SimpleWifi提供了一个简单而强大的接口来管理Windows环境下的WiFi网络。通过本文的示例代码,您可以实现:
这些功能可以用来构建各种网络管理工具,如WiFi分析器、网络监控工具等。
本文作者:技术老小子
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!