獲取系統的網絡狀態與無線網的信號強度(格數)

一臺電腦,有時經過有線網鏈接網絡(調制解調器/局域網),若有網卡也可鏈接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);

值得注意的是,

  • WlanClient只在有網卡的系統中能初始化--因此若是WlanClient不能初始化,且IsNetworkAlive返回true,則意味着當前是有線鏈接網線
  • WlanInterfacer的GetAvailableNetworkList方法,獲取的是附近wifi熱點列表,和任務欄下熱點列表的順序無關。
  • WlanAvailableNetwork的wlanSignalQuality信號強度,100之內,如要轉換成信號格數,須要整除25
  • profileName,對已鏈接的熱點profileName顯示完整,未鏈接的熱點profileName爲empty.

獲取無線網鏈接狀態:

 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

相關文章
相關標籤/搜索