2016-07-20 3 views
3

В настоящее время я использую Managed Wifi API, чтобы получить SSID беспроводной сети, к которой подключено устройство. Вот мой метод:Проверьте, ТОЛЬКО подключено к WiFi C#

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

В настоящее время из этого, можно определить ли я подключен к Wi-Fi и Ethernet (поскольку SSID по-прежнему существует в этой ситуации) или просто Ethernet.

Я хотел бы как-то вычитать, подключен ли я к Wifi, а не к Ethernet, в дополнение к этому.
я имел взгляд на:

  1. Win32_NetworkAdapterConfiguration
  2. Win32_NetworkAdapter

Неожиданно, глядя на AdapterType свойство Win32_NetworkAdapter (когда подключен только к Wi-Fi) Я до сих пор вернулся " Ethernet 802.3 " вместо " Wireless ", что я и ожидал.
К сожалению, я не думаю, что есть способ в Управляемый 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

Вероятно, это: https://bytes.com/topic/c-sharp/answers/657473-wmi-wifi-discovery –

+0

@x ... ни вопрос, ни работа решение – wmash

+0

Вы, вероятно, может достичь это с помощью ndis с использованием gen_physical_medium. Это возвращает перечисление, которое указывает, является ли это Bluetooth Ethernet или лаборатория беспроводной связи и т. Д. См. 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

Не работает , Возвращает при подключении к Wi-Fi при подключении к BOTH Ethernet и Wifi. – wmash

Смежные вопросы