在delphi中如何判断机器是否连在Intenet上?(内空)(100分)

  • 主题发起人 主题发起人 AYellow
  • 开始时间 开始时间
呵呵,这个问题不太好回答,因为可能有很多东东要监测,
域名解析是否正确,网关设置问题了,所以,ping 一下www.yahoo.com
如果通的话,你就认为好了吧...
 
用程序接受一下外部数据,行不行
 
又能用这个骗分了,真好,呵呵。

uses WinInet;

function TFrmMain.GetOnlineStatus : Boolean;
var
ConTypes : Integer;
begin
ConTypes := INTERNET_CONNECTION_MODEM + INTERNET_CONNECTION_LAN + INTERNET_CONNECTION_PROXY;
Result := InternetGetConnectedState(@ConTypes, 0);
end;
 
可是,这一招不是很管用,但我没有上网,只是在本地局域网上是,他也报告在线!
我以前用过一控件,也是这毛病。InternetGetConnectedState是API?我怎么查不到帮助。
 
如果不用控件
◇[DELPHI]判断系统是否连接INTERNET
需要引入URL.DLL中的InetIsOffline函数。
函数申明为:
function InetIsOffline(Flag: Integer): Boolean; stdcall; external 'URL.DLL';
然后就可以调用函数判断系统是否连接到INTERNET
if InetIsOffline(0) then ShowMessage('not connected!')
else ShowMessage('connected!');
该函数返回TRUE如果本地系统没有连接到INTERNET。
附:
大多数装有IE或OFFICE97的系统都有此DLL可供调用。
InetIsOffline
BOOL InetIsOffline(
DWORD dwFlags,
);
 
你的要求是不切合实际的,局域网是否连接Internet的情况很复杂,比如用的内部ip,
代理服务器,原来的169一类的接入......如果你真的要得到非常准确的答案,
就只能牺牲时间用Ping或者InternetOpenUrl(WinInet中的一个函数)一类的方法了,
用这类方法也不能很准确,说知道你用来测试的地址能不能用呢,
Microsoft这样的站点这几天不也完蛋了么。
当然可以用多个地址,那就更耗费时间了。
 
多人接受答案了。
 
后退
顶部