检查是否只连接WiFi C#

4

我目前使用Managed Wifi API来获取设备连接到的无线网络的SSID。这是我的方法:

public string getSSID() {
    try {
        WlanClient wlan = new WlanClient();
        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)));
        }
        return ConnectedSSIDs[0];
    } catch (Win32Exception) {
        return EMPTY;
    } catch (Exception Ex) {
        throw Ex;
    }
}

目前,我可以确定我是否连接到Wifi和以太网(因为在这种情况下仍然存在SSID),还是只连接了以太网。

我想要一些方法能够推断出我是否只连接了Wifi而不是除此之外还连接了以太网。
我已经看过以下内容:

  1. Win32_NetworkAdapterConfiguration
  2. Win32_NetworkAdapter

令人惊讶的是,查看 Win32_NetworkAdapter AdapterType 属性(仅连接到Wifi时),我仍然返回“Ethernet 802.3”而不是我所期望的“无线”
不幸的是,我认为在 Managed Wifi API 中没有实现我想要的功能。

编辑

所以我定义了这三个常量:

private const string WIFI_AND_ETHERNET = "WIFI & ETHERNET";
private const string WIFI = "WIFI";
private const string ETHERNET = "ETHERNET";

目前,我展示的方法可以判断网络连接是ETHERNET还是WIFI_AND_ETHERNET

这是通过检查是否可用/可见SSID来实现的。如果有,则返回WIFI_AND_ETHERNET,但在没有一个的情况下,它将仅返回ETHERNET

现在我需要的是一种区分网络连接是通过WIFIONLY还是WIFI_AND_ETHERNET的方法。


可能是这个:https://bytes.com/topic/c-sharp/answers/657473-wmi-wifi-discovery - user6522773
@x... 问题和解决方案都不起作用。 - wmash
你可以使用ndis和gen_physical_medium来实现这个功能。它会返回一个枚举,指定是蓝牙以太网还是无线实验室等。请参阅https://msdn.microsoft.com/en-us/library/windows/hardware/ff569621(v=vs.85).aspx。 - rfkortekaas
2个回答

2

试试这样做。

 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 lanProcess = new Process
        {
            StartInfo =
                      {
                          FileName = "netsh.exe",
                          Arguments = "interface show interface name=\"Ethernet\" ",
                          UseShellExecute = false,
                          RedirectStandardOutput = true,
                          CreateNoWindow = true
                      }
        };
        lanProcess.Start();
        var lanOutput = lanProcess.StandardOutput.ReadToEnd();
        var lanState = lanOutput.Split(new[] { Environment.NewLine },StringSplitOptions.RemoveEmptyEntries).FirstOrDefault(l => l.Contains("Connect state"));
        var wlanState = output.Split(new[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries).FirstOrDefault(l => l.Contains("State"));
        if (!wlanState.Contains("disconnected")&&lanState.Contains("Disconnected"))

        {
            Console.WriteLine("Wi-Fi");
        }
        else if(wlanState.Contains("disconnected") && !lanState.Contains("Disconnected"))
        {
            Console.WriteLine("Ethernet");
        }
        else if (!wlanState.Contains("disconnected") && !lanState.Contains("Disconnected"))
        {
            Console.WriteLine("Wi-Fi & Ethernet");
        }
        else
        {
            Console.WriteLine("Not connected");
        }
        Console.Read();

0

试试这样。

 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 state = output.Split(new[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries).FirstOrDefault(l => l.Contains("State"));
        if (!state.Contains("disconnected"))
        {
            Console.WriteLine("Wi-Fi");
        }
        else
        {
            Console.WriteLine("Ethernet");
        }
        Console.Read();

无法工作。连接了以太网和Wifi后,仍然返回连接到Wifi。 - wmash

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接