27

我想知道是否有任何 .Net 类可以让我知道我连接的无线网络的 SSID。到目前为止,我只找到了下面链接的库。是我能得到的最好的还是我应该使用别的东西? 托管 WiFi ( http://www.codeplex.com/managedwifi )

利用WMI的方法适用于 Windows XP,但它不再适用于 Windows Vista。

4

7 回答 7

27

我解决了使用图书馆。结果很容易使用提供的类:

首先我必须创建一个 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)));
}
于 2009-01-10T23:35:34.333 回答
8

我们使用的是托管 wifi 库,但如果在查询期间网络断开连接,它会引发异常。

尝试:

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;
于 2014-08-23T09:37:12.893 回答
3

看起来这会做你想要的:

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

于 2009-01-10T21:12:23.263 回答
2

如何在 .net 中获取可用的 wifi AP 及其信号强度

于 2009-02-02T21:46:52.563 回答
1

(交叉发布在如何使用 WMI 或 System.Net.NetworkInformation windows 10 在 c# 中获取当前连接的 wifi SSID?

我发现了一个可以追溯到 2014 年的相当古老的图书馆:

Microsoft.WindowsAPICodePack-Core version 1.1.0.2

虽然它不符合 .NET Standard,但这个库与我的 .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);
}
于 2019-11-13T20:20:02.773 回答
0

您将不得不使用本机 WLAN API。这里有一个很长的讨论。显然这是 Managed Wifi API 使用的,因此如果您对使用 LGPL 代码没有任何限制,那么使用它会更容易。

于 2009-01-10T23:10:54.023 回答
0

我想做到这一点,并尝试使用 ManagedWifi,正如其他答案中所建议的那样。但这导致了此处无法解决的异常: Issue with using Managed WiFi (NativeWiFi API)

我通过完全切换到使用SimpleWiFi并忽略了 ManagedWifi 包解决了这个问题。

看一下源代码,看起来 SW 是对 MW 中某些功能的固定重新实现。

于 2020-02-07T14:48:48.283 回答