【问题标题】:How to get currently connected wifi SSID in c# using WMI or System.Net.NetworkInformation windows 10?如何使用 WMI 或 System.Net.NetworkInformation windows 10 在 c# 中获取当前连接的 wifi SSID?
【发布时间】:2017-01-13 17:56:31
【问题描述】:

我尝试了两种不同的方法

第一种方式:空异常问题

try{

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);
           }
       }
    }

}catch(Exception ex){

}

第二种方式:我正在连接 wi-fi 但无法获取 SSID

if (System.Net.NetworkInformation.NetworkInterface.GetIsNetworkAvailable()) {
    foreach (NetworkInterface ni in NetworkInterface.GetAllNetworkInterfaces()) {

   if (ni.NetworkInterfaceType == NetworkInterfaceType.Wireless80211 && ni.OperationalStatus== OperationalStatus.Up   ) {
       Network = "NETWORK ( N/A )";
           Wifi = "Wifi (" + ni.Name + ")";
        }
    }
}

请有人告诉我如何获取连接的 wifi SSID。

【问题讨论】:

    标签: c# wmi ssid


    【解决方案1】:
        // Show SSID and Signal Strength
        private void showConnectedId() {
            System.Diagnostics.Process p = new System.Diagnostics.Process();
            p.StartInfo.FileName = "netsh.exe";
            p.StartInfo.Arguments = "wlan show interfaces";
            p.StartInfo.UseShellExecute = false;
            p.StartInfo.RedirectStandardOutput = true;
            p.Start();
    
            string s = p.StandardOutput.ReadToEnd();
            string s1 = s.Substring(s.IndexOf("SSID"));
            s1 = s1.Substring(s1.IndexOf(":"));
            s1 = s1.Substring(2, s1.IndexOf("\n")).Trim();
    
            string s2 = s.Substring(s.IndexOf("Signal"));
            s2 = s2.Substring(s2.IndexOf(":"));
            s2 = s2.Substring(2, s2.IndexOf("\n")).Trim();
    
            labelStatus.Text = "WIFI connected to " + s1 + "  " + s2;
            p.WaitForExit();
        }
    

    【讨论】:

    • 我可以在 UWP 中使用它吗?
    • 看起来你不能从 UWP 运行 netsh。只是提醒一下。
    【解决方案2】:

    您可以尝试使用下面提到的WMI 类。两者都在 cimv2

    中定义

    SELECT * FROM WiFi_AdapterAssociationInfo

    SELECT * FROM WiFi_AvailableNetwork

    更多详情:WIFI Information

    【讨论】:

    • 您好,感谢您的回答和参考WIFI信息
    • 如果这样可以解决您的问题,请考虑将答案标记为赞成票。如果没有,请分享更多问题。
    • UWP 不支持 WMI。 social.msdn.microsoft.com/Forums/sqlserver/en-US/… 请注意。
    • 这在我的机器上不起作用。 ([wmisearcher]”SELECT * FROM WiFi_AvailableNetwork”).get() 导致:枚举集合时发生错误:无效类。
    • 我的也一样(W10x64):无效类。
    【解决方案3】:

    我发现了一个可以追溯到 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);
    }
    

    【讨论】:

      【解决方案4】:

      我就是想这样做。 有一个 nuget 包似乎包装了较低级别的 API,称为 SimpleWifi,它对我来说非常有效。

      请注意,这似乎是对早期库“ManagedWifi”的错误修复重新实现,它为我抛出了无法解决的异常,如下所示: Issues with using Managed WiFi (NativeWiFi API)

      【讨论】:

      • SimpleWifi 当然可以,但它自 2015 年以来一直没有更新。我已经成功使用了一个更新的 nuget 包,称为 ManagedNativeWifi github.com/emoacht/ManagedNativeWifi
      猜你喜欢
      • 1970-01-01
      • 2019-03-01
      • 2014-05-27
      • 1970-01-01
      • 2021-02-16
      • 2014-02-18
      • 1970-01-01
      • 2021-02-05
      • 1970-01-01
      相关资源
      最近更新 更多