检查互联网访问始终返回true

时间:2015-10-14 16:59:09

标签: delphi internet-connection

以下代码在我的系统上始终返回True:

uses
    WinInet;

function CheckInternetConnection() : Boolean;
var
    dwConnectionTypes: Integer;
begin
    dwConnectionTypes := (
        INTERNET_CONNECTION_MODEM +
        INTERNET_CONNECTION_LAN +
        INTERNET_CONNECTION_PROXY);     // "dwConnectionTypes" now "7"
    if (InternetGetConnectedState(@dwConnectionTypes, 0)) then
        Result := True      // Always hit, "dwConnectionTypes" now "18"
    else
        Result := False;    // Never reaches here!
end;

我试过了:

* unplugging the network cable
* stopped "Wireless Zero Configuration" service
* disabled all connections in Control Panel > Network Connections
* definitely confirmed no internet connection in a web browser

我错过了什么?

更新

我已确认动态加载wininet.dll并使用GetProcAddress查找方法" InternetGetConnectedState"在互联网断开时给出完全相同的结果(返回True,参数设置为" 18")。

1 个答案:

答案 0 :(得分:4)

如果您想知道自己是否已连接到互联网,则无法通过其他方式与互联网上的主机联系。

技术上

正确然后您只知道该主机是否在线,但这通常是足够好的,因为如果您的程序需要互联网访问,那是因为您需要在互联网上放置主机。

这样做的一种方法是使用Indy的TIdHTTP

uses
  IdHTTP;

用途   IdHTTP;

function HasInternet: Boolean;
begin
  with TIdHTTP.Create(nil) do
    try
      try
        HandleRedirects := True;
        Result := Get('http://www.Google.com/') <> '';
      except
        Result := false;
      end;
    finally
      free;
    end;
end;

然后使用它:

procedure TForm1.FormCreate(Sender: TObject);
begin
  Caption := BoolToStr(HasInternet, True);
end;

但尝试联系主持人会更好。