我想知道是否有任何 .Net 类可以让我知道我连接到的无线网络的 SSID。目前我只找到了下面链接的库,这是最好的还是应该使用其他东西?
Managed WiFi (http://www.codeplex.com/managedwifi)
利用 WMI 的方法适用于 Windows XP,但在 Windows Vista 上不再适用。
利用 WMI 的方法适用于 Windows XP,但在 Windows Vista 上不再适用。
我使用了这个库来解决问题。使用提供的类非常容易:
首先我需要创建一个WlanClient对象
wlan = new WlanClient();
然后,我可以使用以下代码获取PC连接到的SSID列表:
Collection<String> connectedSsids = new Collection<string>();
foreach (WlanClient.WlanInterface wlanInterface in wlan.Interfaces)
{
Wlan.Dot11Ssid ssid = wlanInterface.CurrentConnection.wlanAssociationAttributes.dot11Ssid;
connectedSsids.Add(new String(Encoding.ASCII.GetChars(ssid.SSID,0, (int)ssid.SSIDLength)));
}
var process = new Process
{
StartInfo =
{
FileName = "netsh.exe",
Arguments = "wlan show interfaces",
UseShellExecute = false,
RedirectStandardOutput = true,
CreateNoWindow = true
}
};
process.Start();
var output = process.StandardOutput.ReadToEnd();
var line = output.Split(new[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries).FirstOrDefault(l => l.Contains("SSID") && !l.Contains("BSSID"));
if (line == null)
{
return string.Empty;
}
var ssid = line.Split(new[] { ":" }, StringSplitOptions.RemoveEmptyEntries)[1].TrimStart();
return ssid;
ManagementObjectSearcher searcher = new ManagementObjectSearcher("root\\WMI",
"SELECT * FROM MSNdis_80211_ServiceSetIdentifier");
foreach (ManagementObject queryObj in searcher.Get())
{
Console.WriteLine("-----------------------------------");
Console.WriteLine("MSNdis_80211_ServiceSetIdentifier instance");
Console.WriteLine("-----------------------------------");
if(queryObj["Ndis80211SsId"] == null)
Console.WriteLine("Ndis80211SsId: {0}",queryObj["Ndis80211SsId"]);
else
{
Byte[] arrNdis80211SsId = (Byte[])
(queryObj["Ndis80211SsId"]);
foreach (Byte arrValue in arrNdis80211SsId)
{
Console.WriteLine("Ndis80211SsId: {0}", arrValue);
}
}
}
来自 http://bytes.com/groups/net-c/657473-wmi-wifi-discovery
(同时发布在如何在Windows 10中使用WMI或System.Net.NetworkInformation c#获取当前连接的wifi SSID?)
我发现了一个相当古老的库,可以追溯到2014年:
Microsoft.WindowsAPICodePack-Core version 1.1.0.2
虽然这个库不符合.NET标准,但它可以与我的.NET Core 3.0应用程序集成,但显然它不是跨平台的。
示例代码:
var networks = NetworkListManager.GetNetworks(NetworkConnectivityLevels.Connected);
foreach (var network in networks) {
sConnected = ((network.IsConnected == true) ? " (connected)" : " (disconnected)");
Console.WriteLine("Network : " + network.Name + " - Category : " + network.Category.ToString() + sConnected);
}
我想做的正是这个,并尝试使用ManagedWifi,如其他答案所建议的。 但是,这导致了无法解决的异常,如此处所述: Issues with using Managed WiFi (NativeWiFi API)。
我通过完全切换到使用SimpleWiFi并忽略ManagedWifi包来解决了这个问题。
浏览源代码,看起来SW是对MW中某些功能的固定重新实现。