獲取電腦的網絡連接狀態(一)InternetGetConnectedState


InternetGetConnectedState

  • 此函數獲取網絡狀態有延時,且對網卡傷害較大
  • MSDN官方自己推薦不建議使用,不管是連網狀態下還是斷網情況下,獲取的網絡狀態都有不准確的案例,如下:

  (BUG) InternetGetConnectedState API returns false result

  Detecting LAN connection using InternetGetConnectedState API doesn't work

  https://stackoverflow.com/questions/14127810/check-internet-connection-with-internetgetconnectedstate-always-true

  https://bbs.csdn.net/topics/340141699

在看下文之前,可以瀏覽MSDN:通過InternetGetConnectedState方法對網絡狀態的獲取

如上InternetGetConnectedState方法介紹中

  • dwReversed必須設置為0
  • 通過輸出值lpdwFlags可以獲取當前網絡連接的信息,通過拼裝對比可以得到當前連接的網絡類型,如撥號上網/局域網等
bool InternetGetConnectedState( out LPDWORD lpdwFlags, int dwReversed);

首先,添加非托管函數並調用,可以獲取網絡是否聯網

//聲明外部的函數 [DllImport("winInet.dll ")] private static extern bool InternetGetConnectedState(ref int flag,int dwReserved);

可以通過dwFlag判斷連網類型,撥號上網 or 局域網

 1         [DllImport("winInet.dll ")]
 2         private static extern bool InternetGetConnectedState(ref int flag, int dwReserved);
 3 
 4         //調制解調器上網
 5         private const int INTERNET_CONNECTION_MODEM = 1;
 6         private const int INTERNET_CONNECTION_LAN = 2;
 7         private const int INTERNET_CONNECTION_PROXY = 4;
 8         private const int INTERNET_CONNECTION_MODEM_BUSY = 8;
 9 
10         public static bool InternetGetConnectedState()
11         {
12             var dwFlag = 0;
13             if (InternetGetConnectedState(ref dwFlag, 0))
14             {
15                 if ((dwFlag & INTERNET_CONNECTION_MODEM) != 0)
16                 {
17                     //采用調制解調器上網(撥號)
18                     return true;
19                 }
20                 if ((dwFlag & INTERNET_CONNECTION_LAN) != 0)
21                 {
22                     //局域網
23                 }
24                 return true;
25             }
26             return false;
27         }

 

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

Demo 下載


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM