2012-08-08 57 views
2

我可以檢測網絡適配器通過使用網絡接口子類型框架4.0

NetworkInterface[] interfaces = NetworkInterface.GetAllNetworkInterfaces(); 
foreach (NetworkInterface adapter in interfaces) 
{ 
    Console.WriteLine(adapter.NetworkInterfaceType)  
} 

鍵入C#4.0但是我不能找到一個枚舉或適當的方法(除了適配器名稱),以檢測適配器子類型比如Wifi,3G等等.Windows手機有一個叫做NetworkInterfaceSubType的屬性,它完成了這個任務,但是.Net Framework 4.0沒有這樣的API。

我真的想避免使用名稱作爲標識符(例如'無線網絡','藍牙網絡'),這不能從系統到系統保持不變。

感謝

回答

0

就以Managed Wifi API看看它是基於Native Wifi API,按照代碼示例很容易做到

using NativeWifi; 
using System; 
using System.Text; 

namespace WifiExample 
{ 
    class Program 
    { 
     /// <summary> 
     /// Converts a 802.11 SSID to a string. 
     /// </summary> 
     static string GetStringForSSID(Wlan.Dot11Ssid ssid) 
     { 
      return Encoding.ASCII.GetString(ssid.SSID, 0, (int) ssid.SSIDLength); 
     } 

     static void Main(string[] args) 
     { 
      WlanClient client = new WlanClient(); 
      foreach (WlanClient.WlanInterface wlanIface in client.Interfaces) 
      { 
       // Lists all networks with WEP security 
       Wlan.WlanAvailableNetwork[] networks = wlanIface.GetAvailableNetworkList(0); 
       foreach (Wlan.WlanAvailableNetwork network in networks) 
       { 
        if (network.dot11DefaultCipherAlgorithm == Wlan.Dot11CipherAlgorithm.WEP) 
        { 
         Console.WriteLine("Found WEP network with SSID {0}.", GetStringForSSID(network.dot11Ssid)); 
        } 
       } 

       // Retrieves XML configurations of existing profiles. 
       // This can assist you in constructing your own XML configuration 
       // (that is, it will give you an example to follow). 
       foreach (Wlan.WlanProfileInfo profileInfo in wlanIface.GetProfiles()) 
       { 
        string name = profileInfo.profileName; // this is typically the network's SSID 
        string xml = wlanIface.GetProfileXml(profileInfo.profileName); 
       } 

       // Connects to a known network with WEP security 
       string profileName = "Cheesecake"; // this is also the SSID 
       string mac = "52544131303235572D454137443638"; 
       string key = "hello"; 
       string profileXml = string.Format("<?xml version=\"1.0\"?><WLANProfile xmlns=\"http://www.microsoft.com/networking/WLAN/profile/v1\"><name>{0}</name><SSIDConfig><SSID><hex>{1}</hex><name>{0}</name></SSID></SSIDConfig><connectionType>ESS</connectionType><MSM><security><authEncryption><authentication>open</authentication><encryption>WEP</encryption><useOneX>false</useOneX></authEncryption><sharedKey><keyType>networkKey</keyType><protected>false</protected><keyMaterial>{2}</keyMaterial></sharedKey><keyIndex>0</keyIndex></security></MSM></WLANProfile>", profileName, mac, key); 
       wlanIface.SetProfile(Wlan.WlanProfileFlags.AllUser, profileXml, true); 
       wlanIface.Connect(Wlan.WlanConnectionMode.Profile, Wlan.Dot11BssType.Any, profileName); 
      } 
     } 
    } 
}