如何检测计算机是否已经连接internet( 针对 adsl连接 ) (200分)

  • 主题发起人 主题发起人 zywcd
  • 开始时间 开始时间
uses wininet;

Function ConnectionKind :boolean;
var
flags: dword;
begin
Result := InternetGetConnectedState(@flags, 0);
if Result then
begin
if (flags and INTERNET_CONNECTION_MODEM) = INTERNET_CONNECTION_MODEM then
begin
showmessage('Modem');
end;

if (flags and INTERNET_CONNECTION_LAN) = INTERNET_CONNECTION_LAN then

begin
showmessage('LAN');
end;
if (flags and INTERNET_CONNECTION_PROXY) = INTERNET_CONNECTION_PROXY then

begin
showmessage('Proxy');
end;

if (flags and INTERNET_CONNECTION_MODEM_BUSY)=INTERNET_CONNECTION_MODEM_BUSY then
begin
showmessage('Modem Busy');
end;
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
ConnectionKind;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
if GetSystemMetrics(SM_NETWORK) AND $01 = $01 then
ShowMessage('联上网') else
ShowMessage('未联上网');
end;
 
只要连接一次后,即使断开,上面的代码也会认为连线中。
 
可以用PING控件对一个IP地址进行定期测试,如果没有响应达到一定数量,就可以认为是断开
 
Function GetInternetConnect: Boolean;
Var
mHost: PHostEnt;
mWSAData: TWSAData;
Begin
WSAStartup(MAKEWORD(2, 0), mWSAData);
Try
mHost := GetHostByName('www.soho.com');
If mHost = Nil Then
Begin
HTTPClient.Host := 'www.microsoft.com';
HTTPClient.Connect(3000);
If HTTPClient.Connected Then Result := True Else Result := False;
HTTPClient.Disconnect;
End
Else
Result := True;
Except
Result := False;
End;
WSACleanUP;
End;
此方法我用了很久。
 
上面的做法是测试网络设置的软问题上的,而硬件上的,比如网络线,网卡没连上的
问题就得用internetchekconnection('url地址',1,0)
 
有很多此类文章请查一下
 
internetchekconnection方法WIN98兼容有问题,再说如果是网线或网卡那是物理层和联路层的错误。协议层以上的任何方法都没用。那得靠人去解决。
 
多人接受答案了。
 
后退
顶部