2016-07-06 85 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

相关问题