为什么我的InternetGetConnectedState()总是等于0,输出"没有上网" //判断联网状态res并得到相应字符串StateStr BOOL InternetGetConnectedState(LPDWORD flag,char *StateStr) { BOOL res=InternetGetConnectedState(flag,1);//得到联网标识符res switch(res) { case INTERNET_CONNECTION_MODEM://与MODEM连接上网 strcpy(StateStr,"与MODEM连接上网"); break; case INTERNET_CONNECTION_LAN://与局域网连接上网 strcpy(StateStr,"与局域网连接上网"); break; case INTERNET_CONNECTION_PROXY://与防火墙连接上网 strcpy(StateStr,"与防火墙连接上网"); break; case INTERNET_CONNECTION_MODEM_BUSY://与MODEM连接繁忙 strcpy(StateStr,"与MODEM连接繁忙"); break; case 0://没有上网 default://其他默认值 strcpy(StateStr,"没有上网"); break; } return res; }
#define INCLUDEBIT(m,b) ((m&b)==b) DWORD flags; ::InternetGetConnectedState(&flags,NULL); if INCLUDEBIT(flags,INTERNET_CONNECTION_MODEM) { SetDlgItemText(IDC_EDIT_METHOD,"拨号上网"); }else if INCLUDEBIT(flags,INTERNET_CONNECTION_LAN){ SetDlgItemText(IDC_EDIT_METHOD,"通过局域网上网"); } else if INCLUDEBIT(flags,INTERNET_CONNECTION_PROXY){ SetDlgItemText(IDC_EDIT_METHOD,"通过代理服务器上网"); }else if INCLUDEBIT(flags,INTERNET_CONNECTION_MODEM_BUSY){ SetDlgItemText(IDC_EDIT_METHOD,"modem正忙,但不是用于上网"); } else SetDlgItemText(IDC_EDIT_METHOD,"未知情况");
flags 才是返回参数。lpdwFlags Address of a double-word variable where the connection description should be returned. Can be a combination of the following values:INTERNET_CONNECTION_MODEM Local system uses a modem to connect to the Internet. INTERNET_CONNECTION_LAN Local system uses a local area network to connect to the Internet. INTERNET_CONNECTION_PROXY Local system uses a proxy server to connect to the Internet. INTERNET_CONNECTION_MODEM_BUSY Local system's modem is busy with a non-Internet connection. 检测相应的标志位是否设置。
我这样写的,既然说我没有上网 //判断上网 DWORD flag; CString StateStr; InternetGetConnectedState(&flag,1);//得到联网标识符 switch(flag) { case INTERNET_CONNECTION_MODEM://与MODEM连接上网 //strcpy(StateStr,"与MODEM连接上网"); StateStr="与MODEM连接上网"; break; case INTERNET_CONNECTION_LAN://与局域网连接上网 //strcpy(StateStr,"与局域网连接上网"); StateStr="与局域网连接上网"; break; case INTERNET_CONNECTION_PROXY://与防火墙连接上网 //strcpy(StateStr,"与防火墙连接上网"); StateStr="与防火墙连接上网"; break; case INTERNET_CONNECTION_MODEM_BUSY://与MODEM连接繁忙 //strcpy(StateStr,"与MODEM连接繁忙"); StateStr="与MODEM连接繁忙"; break; case 0://没有上网 default://其他默认值 //strcpy(StateStr,"没有上网"); StateStr="没有上网"; break; } MessageBox(StateStr);
LZ 上面的代码有问题, 你没看清楚这个flag的值的说明, flag这个值是一些标志的组合, 不能象你那样用case去判断。 lpdwFlags Address of a double-word variable where the connection description should be returned. Can be a combination of the following values:可能是以下几个标志的结合。所以要用位测试去判断, 参见8楼 xuzheng318(忧郁王子) 的代码
//判断联网状态res并得到相应字符串StateStr
BOOL InternetGetConnectedState(LPDWORD flag,char *StateStr)
{ BOOL res=InternetGetConnectedState(flag,1);//得到联网标识符res
switch(res)
{ case INTERNET_CONNECTION_MODEM://与MODEM连接上网
strcpy(StateStr,"与MODEM连接上网");
break;
case INTERNET_CONNECTION_LAN://与局域网连接上网
strcpy(StateStr,"与局域网连接上网");
break;
case INTERNET_CONNECTION_PROXY://与防火墙连接上网
strcpy(StateStr,"与防火墙连接上网");
break;
case INTERNET_CONNECTION_MODEM_BUSY://与MODEM连接繁忙
strcpy(StateStr,"与MODEM连接繁忙");
break;
case 0://没有上网
default://其他默认值
strcpy(StateStr,"没有上网");
break;
}
return res;
}
DWORD flags;
::InternetGetConnectedState(&flags,NULL);
if INCLUDEBIT(flags,INTERNET_CONNECTION_MODEM)
{
SetDlgItemText(IDC_EDIT_METHOD,"拨号上网");
}else if INCLUDEBIT(flags,INTERNET_CONNECTION_LAN){
SetDlgItemText(IDC_EDIT_METHOD,"通过局域网上网");
}
else if INCLUDEBIT(flags,INTERNET_CONNECTION_PROXY){
SetDlgItemText(IDC_EDIT_METHOD,"通过代理服务器上网");
}else if INCLUDEBIT(flags,INTERNET_CONNECTION_MODEM_BUSY){
SetDlgItemText(IDC_EDIT_METHOD,"modem正忙,但不是用于上网");
}
else SetDlgItemText(IDC_EDIT_METHOD,"未知情况");
Address of a double-word variable where the connection description should be returned. Can be a combination of the following values:INTERNET_CONNECTION_MODEM Local system uses a modem to connect to the Internet.
INTERNET_CONNECTION_LAN Local system uses a local area network to connect to the Internet.
INTERNET_CONNECTION_PROXY Local system uses a proxy server to connect to the Internet.
INTERNET_CONNECTION_MODEM_BUSY Local system's modem is busy with a non-Internet connection.
检测相应的标志位是否设置。
DWORD flag;
CString StateStr;
InternetGetConnectedState(&flag,1);//得到联网标识符
switch(flag)
{
case INTERNET_CONNECTION_MODEM://与MODEM连接上网
//strcpy(StateStr,"与MODEM连接上网");
StateStr="与MODEM连接上网";
break;
case INTERNET_CONNECTION_LAN://与局域网连接上网
//strcpy(StateStr,"与局域网连接上网");
StateStr="与局域网连接上网";
break;
case INTERNET_CONNECTION_PROXY://与防火墙连接上网
//strcpy(StateStr,"与防火墙连接上网");
StateStr="与防火墙连接上网";
break;
case INTERNET_CONNECTION_MODEM_BUSY://与MODEM连接繁忙
//strcpy(StateStr,"与MODEM连接繁忙");
StateStr="与MODEM连接繁忙";
break;
case 0://没有上网
default://其他默认值
//strcpy(StateStr,"没有上网");
StateStr="没有上网";
break;
}
MessageBox(StateStr);
Address of a double-word variable where the connection description should be returned. Can be a combination of the following values:可能是以下几个标志的结合。所以要用位测试去判断, 参见8楼 xuzheng318(忧郁王子) 的代码