2016-07-20 43 views
3

現在、Managed Wifi APIを使用して、デバイスが接続されているワイヤレスネットワークのSSIDを取得しています。無線LANにのみ接続されていることを確認する

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

現在、このことから、私は(SSIDがまだその状況に存在するため)私は無線LANとイーサネットに接続されていますかどうかを判断することができますか、単にイーサネット:ここに私の方法です。

私はちょうど私がWifiに接続されているかどうかと、それに加えてイーサネットではないかどうかを差し引きたいと思います。
は、私が見て持っていた:

  1. Win32_NetworkAdapterConfiguration
  2. Win32_NetworkAdapter

驚くべきことに、(唯一の無線LANに接続されている)のWin32_NetworkAdapterADAPTERTYPEプロパティを見て、私はまだ」を返されていますイーサネット802.3 ""の代わりに "ワイヤレス"これは私が期待しているものです。
残念ながら、私は方法があるとは思わないマネージドWifi API私が欲しいものを達成する。

EDITは、だから私は、これらの3つの定数が定義されている:

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

現在、私は上に示している方法は、ネットワーク接続がETHERNETWIFI_AND_ETHERNETであるかどうかを控除することができます。
これは、SSIDが使用可能かどうかを確認することで行います。その場合は、WIFI_AND_ETHERNETが返されますが、存在しない場合はETHERNETのみが返されます。私が今必要なもの

は、ネットワーク接続がWIFIONLYまたはWIFI_AND_ETHERNET一緒

+0

この:https://bytes.com/topic/c-sharp/answers/657473-wmi-wifi-discovery –

+0

@x ...疑問もおそらく達成することができます – wmash

+0

ソリューションの仕事でもありませんgen_physical_mediumを使用してndisでこれを行います。これは、Bluetoothイーサネットかワイヤレスラボかどうかを指定する列挙型を返します。https://msdn.microsoft.com/en-us/library/windows/hardware/ff569621(v=vs.85).aspx – rfkortekaas

答えて

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(); 
+0

これは意図したとおりに動作します。ありがとうございました! – wmash

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(); 
+0

が動作しない。両方に接続したときにWifiに接続したときに戻ります – wmash

関連する問題