始终检查互联网访问 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;
但最好尝试联系您的房东。
以下代码在我的系统上总是 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;
但最好尝试联系您的房东。