如何判断本机当前是否连接到Internet?VC5里为什么用不了InternetGetConnectedState()?

Winsock 2001-06-24 12:34:00
查了以前的贴子,发现可以用InternetGetConnectedState()判断,但为什么在VC5里提示InternetGetConnectedState()未定义,我已经包含了头文件与LIB库,查找wininet.h发现根本没有InternetGetConnectedState()的声明,INTERNET_CONNECTION_MODEM等宏定义也没有,这是怎么回事?除此以外还有无别的方法?
...全文
217 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
runbuff 2001-06-28
  • 打赏
  • 举报
回复
gz
jazzrabbit 2001-06-28
  • 打赏
  • 举报
回复
一样的.就是用标志掩码去屏蔽就行了.

#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,"未知情况");
明白了不?
SeaBirds 2001-06-25
  • 打赏
  • 举报
回复
要这么复杂吗???
用代码ping一下几个特别的ip,或解几个域名成功的话那不就是连上的INTERNET吗,而且这个方法就不管你通过什么上网的啦。
neatbeer 2001-06-25
  • 打赏
  • 举报
回复
to enmity(真我的风采):谢谢
to panda_w(好想睡啊!),jazzrabbit(爵士兔):
那,网卡的问题怎么解决?我原来的程序是这样的:
LPDWORD flags;
BOOL m_bConnected=::InternetGetConnectedState(flags,NULL);

switch(*flags)
{
case INTERNET_CONNECTION_MODEM:
SetDlgItemText(IDC_EDIT_METHOD,"拨号上网");
break;
case INTERNET_CONNECTION_LAN:
SetDlgItemText(IDC_EDIT_METHOD,"通过局域网上网");
break;
case INTERNET_CONNECTION_PROXY:
SetDlgItemText(IDC_EDIT_METHOD,"通过代理服务器上网");
break;
case INTERNET_CONNECTION_MODEM_BUSY:
SetDlgItemText(IDC_EDIT_METHOD,"modem正忙,但不是用于上网");
break;
default:
SetDlgItemText(IDC_EDIT_METHOD,"未知情况");
}
我通过代理服务器上网的时候,显示“未知情况”,跟踪发现*flag=0x00000056,而上面四个值好像是0 2 4 8
jazzrabbit 2001-06-25
  • 打赏
  • 举报
回复
呵呵,当然快啦,试试就知道.
enmity 2001-06-24
  • 打赏
  • 举报
回复
使用
RasEnumConnections
RasGetConnectStatus
neatbeer 2001-06-24
  • 打赏
  • 举报
回复
enmity(真我的风采)能不能给个例子?
jazzrabbit 2001-06-24
  • 打赏
  • 举报
回复
internetgetconnectstatus返回的东东在flag里,并且是一些标志位
要用位掩码方式来确定,比如验证是否modem连线online
DWORD flags;
::InternetGetConnectedState(&flags,NULL);
if ((flags&INTERNET_CONNECTION_MODEM)== INTERNET_CONNECTION_MODEM){
TRACE0("现在用modem连上了网");
}
neatbeer 2001-06-24
  • 打赏
  • 举报
回复
我用VC6,我用下面的代码:
LPDWORD flags;
BOOL m_bConnected=::InternetGetConnectedState(flags,NULL);
奇怪的是无论我上不上网,m_bConnected总是TRUE。我没有拨号,也没设置代理服务器,结果也是这样,谁能告诉我为什么?
另外,MODEM忙,但不是用于上网是什么状态?

Winsock 2001-06-24
  • 打赏
  • 举报
回复
没人知道吗?
Winsock 2001-06-24
  • 打赏
  • 举报
回复
如果我不上网,但装有Modem也会返回真吗?那这个函数还有什么用?
panda_w 2001-06-24
  • 打赏
  • 举报
回复
to winsock: VC5不应该不可以使用的,包含头文件即可了#include <afxinet.h>
to neatbeer(网络咖啡) :
那是因为你的机器上装有Modem或者网卡
enmity 2001-06-24
  • 打赏
  • 举报
回复
绝对保证能够用的,嘿嘿
enmity 2001-06-24
  • 打赏
  • 举报
回复
vb的,要吗?
Winsock 2001-06-24
  • 打赏
  • 举报
回复
如果是局域网通过代理服务器上网,应该算连接到Internet,但如果用你这种方法就是否了!

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧