2016-07-06 205 views
2

我已閱讀了幾個來源。我跟着this接受的答案,並使用Managed WiFi API獲得SSID,如果我通過WiFi連接。這裏是我的代碼:檢查通過以太網C連接#

private void setSSID() { 
    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))); 
    } 
} 

如果我通過WiFi連接但是如果只通過以太網連接則會引發異常,這將完美地獲得SSID。理想的解決方案:

  1. 輸入setSSID()(或東西類似效果)
  2. 檢查是否通過以太網
  3. 如果這樣連接,返回null/0/undefined
  4. 否則,將SSID
    (如果連網絡,我已經接受檢查)

我已經看遍了所有的WMINetworkInformation命名空間,但都沒有提供我在找什麼。
展望WlanApi.cs,異常被拋出在這裏:

public Wlan.WlanConnectionAttributes CurrentConnection { 
    get { 
     int valueSize; 
     IntPtr valuePtr; 
     Wlan.WlanOpcodeValueType opcodeValueType; 
     Wlan.ThrowIfError(
      Wlan.WlanQueryInterface(client.clientHandle, info.interfaceGuid, Wlan.WlanIntfOpcode.CurrentConnection, IntPtr.Zero, out valueSize, out valuePtr, out opcodeValueType)); 
     try { 
      return (Wlan.WlanConnectionAttributes)Marshal.PtrToStructure(valuePtr, typeof(Wlan.WlanConnectionAttributes)); 
     } 
     finally { 
      Wlan.WlanFreeMemory(valuePtr); 
     } 
    } 
} 

又看了看:

+1

拋出什麼異常?你能不能簡單地抓住這個例外,把它當作「沒有wifi可用」的條件?看起來原生API是[這裏](https://msdn.microsoft.com/en-us/library/windows/desktop/ms706274(v = vs.85).aspx)。如果你不喜歡處理庫中的異常,我想你可以編寫自己的包裝器,並直接處理。這個API可以讓你找到接口,枚舉每個接口上可用的網絡等等。由於你似乎能夠告訴你現有的代碼是否通過WiFi連接,所以你不清楚你在問什麼。 –

+0

@PeterDuniho我沒有想到趕上例外。我的錯。它拋出了一個'Win32Exception',所以我抓住它並返回了必要的。郵政編碼作爲答案,我會接受:) – wmash

+0

好的,做到了。 :) –

回答

2

您可以捕獲該異常(你是Win32Exception報告),並將其視爲「無WiFi可用」條件。

如果你願意,你可以檢查ErrorCodeHResult屬性的異常情況,以確保它是你在缺乏WiFi的情況下所期望的錯誤,而不是其他一些更有問題的例外。在後一種情況下,您可能需要重新拋出異常(至少在您確定處理錯誤類型的好策略之前)。

還有native wireless LAN API,您可以直接使用,處理錯誤代碼/結果,而不是處理異常。但我認爲在你的情況下,處理拋出的異常是最簡單的,因爲否則它就像你想的那樣工作。

+0

真棒,歡呼的人:) – wmash