编写下载程序的时候,需要经常判断网络是否连接通,通过下面的方法可以得到网络连接的状态。
要用的函数:InternetGetConnectedState,这个win32 API在系统system32文件夹中winInet.dll中
函数原形:BOOL InternetGetConnectedState(LPDWORD dwFlag,DWORD dwReserved);
参数dwFlag返回当前网络状态,参数dwReserved依然是保留参数,设置为0即可。
INTERNET_CONNECTION_MODEM = 采用调治解调器上网
INTERNET_CONNECTION_LAN = 采用网卡上网;
INTERNET_CONNECTION_PROXY = 采用代理上网;
INTERNET_CONNECTION_MODEM_BUSY = MODEM被其他非INTERNET连接占用;
public class InternetHelper
{
//使用DllImport需导入命名空间,InternetGetConnectedState返回的状态标识位的含义:
private const int INTERNET_CONNECTION_MODEM = 1;
private const int INTERNET_CONNECTION_LAN = 2;
private const int INTERNET_CONNECTION_PROXY = 4;
private const int INTERNET_CONNECTION_MODEM_BUSY = 8;
[DllImport("winInet.dll ")]
private static extern bool InternetGetConnectedState(ref int dwFlag, int dwReserved);
/// <summary>
/// 判断是否有网络连接
/// </summary>
/// <returns>true 有, false 无</returns>
public static bool GetInternetConnectState()
{
var dwFlag = 0;
var netStatus = "";
if (!InternetGetConnectedState(ref dwFlag, 0))
{
return false;
}
if ((dwFlag & INTERNET_CONNECTION_MODEM) != 0) netStatus = "采用调治解调器上网";
if ((dwFlag & INTERNET_CONNECTION_LAN) != 0) netStatus = "采用网卡上网";
if ((dwFlag & INTERNET_CONNECTION_PROXY) != 0) netStatus = "采用代理上网";
if ((dwFlag & INTERNET_CONNECTION_MODEM_BUSY) != 0) netStatus = "MODEM被其他非INTERNET连接占用";
return true;
}
}