C# 获取电脑的网络连接状态

时间:2021-11-28 21:42:07

InternetGetConnectedState

  • 此函数获取网络状态有延时,且对网卡伤害较大
  • MSDN官方自己推荐不建议使用,不管是连网状态下还是断网情况下,获取的网络状态都有不准确的案例,如下:

  (BUG) InternetGetConnectedState API returns false result

  Detecting LAN connection using InternetGetConnectedState API doesn't work

  https://*.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);

C# 获取电脑的网络连接状态

首先,添加非托管函数并调用,可以获取网络是否联网

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

可以通过dwFlag判断连网类型,拨号上网 or 局域网

         [DllImport("winInet.dll ")]
private static extern bool InternetGetConnectedState(ref int flag, int dwReserved); //调制解调器上网
private const int INTERNET_CONNECTION_MODEM = ;
private const int INTERNET_CONNECTION_LAN = ;
private const int INTERNET_CONNECTION_PROXY = ;
private const int INTERNET_CONNECTION_MODEM_BUSY = ; public static bool InternetGetConnectedState()
{
var dwFlag = ;
if (InternetGetConnectedState(ref dwFlag, ))
{
if ((dwFlag & INTERNET_CONNECTION_MODEM) != )
{
//采用调制解调器上网(拨号)
return true;
}
if ((dwFlag & INTERNET_CONNECTION_LAN) != )
{
//局域网
}
return true;
}
return false;
}

获取系统的网络状态与无线网的信号强度(格数)

Demo 下载