一臺電腦,有時經過有線網鏈接網絡(調制解調器/局域網),若有網卡也可鏈接wifi。
那麼如何獲取WLAN是否鏈接,和相應的信號強度呢?html
就如下倆點:api
經過IsNetworkAlive可獲取當前環境是否已經鏈接網絡。詳見《C# 獲取電腦的網絡鏈接狀態》網絡
流程:網絡是否鏈接->是否有無線網鏈接->獲取無線網狀態(信號強度)->返回網絡狀態post
1 [DllImport("sensapi.dll", SetLastError = true)] 2 private static extern bool IsNetworkAlive(out int connectionDescription); 3 public NetworkStatus GetNetworkStatusByNetworkAlive() 4 { 5 var networkStatus = NetworkStatus.InternetWithError; 6 7 int flags = 0; 8 var isNetworkAlive = IsNetworkAlive(out flags); 9 10 int errCode = Marshal.GetLastWin32Error(); 11 if (errCode != 0) 12 { 13 throw new InvalidOperationException($"經過{nameof(IsNetworkAlive)}非託管DLL,獲取網絡狀態時,遇到異常"); 14 } 15 if (isNetworkAlive) 16 { 17 // 獲取WLAN網絡狀態 18 var wlanStatus = GetWlanStatus(); 19 if (isNetworkAlive && wlanStatus == NetworkStatus.WifiWithErro) 20 { 21 networkStatus = NetworkStatus.Internet; 22 } 23 else 24 { 25 networkStatus = wlanStatus; 26 } 27 } 28 return networkStatus; 29 }
暫時只定義了有線網和無線網的狀態 url
1 /// <summary> 2 /// 網絡狀態 3 /// </summary> 4 public enum NetworkStatus 5 { 6 Internet, 7 InternetWithError, 8 WifiWithErro, 9 WifiWithOneBar, 10 WifiWithTwoBars, 11 WifiWithThreeBars, 12 WifiWithFourBars, 13 }
那麼,具體是否有線/仍是無線網絡,如何判斷?見下面~spa
獲取WLAN的名稱與信號強度code
無線網的信息,能夠經過第三方開源ManagedWifi來獲取。htm
ManagedWifi.Dll也能夠從個人雲盤下載:https://pan.baidu.com/s/1CjSUIMr0DuVqDZrdZCx_mA 密碼:2d2oblog
下載後引用到項目中ip
1. WlanClient wlanClient = new WlanClient();
2. 循環foreach(WlanClient.WlanInterface wlanIface in wlanClient.Interfaces)
3. Wlan.WlanAvailableNetwork[] networks = wlanIface.GetAvailableNetworkList(0);
值得注意的是,
獲取無線網鏈接狀態:
1 private NetworkStatus GetWlanStatus() 2 { 3 var wlanStatus = NetworkStatus.WifiWithErro; 4 try 5 { 6 WlanClient wlanClient = new WlanClient(); 7 8 foreach (WlanClient.WlanInterface wlanIface in wlanClient.Interfaces) 9 { 10 if (wlanIface.InterfaceState == Wlan.WlanInterfaceState.Connected && wlanIface.CurrentConnection.isState == Wlan.WlanInterfaceState.Connected) 11 { 12 Wlan.WlanAvailableNetwork[] networks = wlanIface.GetAvailableNetworkList(0); 13 foreach (var network in networks) 14 { 15 if (network.profileName == wlanIface.CurrentConnection.profileName 16 && (int)network.flags == (int)(Wlan.WlanAvailableNetworkFlags.Connected | Wlan.WlanAvailableNetworkFlags.HasProfile)) 17 { 18 switch (network.wlanSignalQuality / 25) 19 { 20 case 0: 21 wlanStatus = NetworkStatus.WifiWithOneBar; 22 break; 23 case 1: 24 wlanStatus = NetworkStatus.WifiWithTwoBars; 25 break; 26 case 2: 27 wlanStatus = NetworkStatus.WifiWithThreeBars; 28 break; 29 default: 30 wlanStatus = NetworkStatus.WifiWithFourBars; 31 break; 32 } 33 break; 34 } 35 } 36 break; 37 } 38 } 39 } 40 catch (Exception e) 41 { 42 } 43 return wlanStatus; 44 }
關鍵字:網絡鏈接狀態NetworkStatus,無線網絡強度(格數),ManagedWifi,IsNetworkAlive,GetLastError