始终检查互联网访问 returns true

Check for internet access always returns true

以下代码在我的系统上总是 returns 正确:

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" 在断开互联网连接的情况下给出完全相同的结果(returns True 并且参数已设置到“18”)。

如果你想知道你是否连接到互联网,没有其他方法可以联系互联网上的主机。

正确 从技术上讲,您只知道该主机是否在线,但这通常就足够了,因为如果您的程序需要互联网访问,那是因为您需要联系主机互联网。

一种方法是使用来自 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;

但最好尝试联系您的房东。