以下代码在我的系统上始终返回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")。
答案 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;
但尝试联系主持人会更好。