我目前正在使用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而不是以太网。
我已经看过了:
令人惊讶的是,查看 Win32_NetworkAdapter 的 AdapterType 属性(当只连接到Wifi时)我仍然返回&#34;以太网802.3&#34; < / em>而不是&#34;无线&#34; 这是我所期望的。
不幸的是,我认为 Managed Wifi API 中有一种方法可以实现我的目标。
修改
所以我定义了这3个常量:
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
。
现在我需要一种方法来区分网络连接是通过WIFI
仅还是WIFI_AND_ETHERNET
答案 0 :(得分:1)
尝试这样。
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();
答案 1 :(得分: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();