Delphi FAQ

Jak sprawdzić, czy użytkownik jest w Internecie

Adam Boduch

Ta funkcja nie wszystkim działa więc....

W sekcji "Interface" dodaj nagłówek:

function InetIsOffline(Flag: Integer): Boolean; stdcall;
external 'URL.DLL';

Teraz w procedurze:

if InetIsOffline(0) then
ShowMessage('Jestem offline') else
ShowMessage('Jestem online');

FAQ

7 komentarzy

Niezawodne rozwiązanie:

function IsNet:Boolean;
const
FLAG_ICC_FORCE_CONNECTION = $0001;
// Missing constant for InternetGetConnectedState flags
const
INTERNET_PING_SITES: Array [0..2] of PChar =
('http://www.google.com',
'http://www.wp.com',
'http://www.onet.com');
var
dwFlags: DWORD;
begin
for dwFlags:=Low(INTERNET_PING_SITES) to High(INTERNET_PING_SITES) do
begin
// Check the connection
Result:= InternetCheckConnection(INTERNET_PING_SITES[dwFlags], FLAG_ICC_FORCE_CONNECTION, 0);
if Result then
Break;
end;
end;

A tak się tego używa:

procedure TForm1.Button1Click(Sender: TObject);
begin
Memo.Clear;
if IsNet then
Memo.Lines.Add('Użytkownik jest teraz podłączony do internetu.')
else
Memo.Lines.Add('Użytkownik nie jest teraz podłączony do internetu!');
end;

Prościej wykorzystać komponenty Indy a konkretnie kontrolkę IdEcho.

Dajemy kod:

try
IdEcho1.Host:='onet.pl';
IdEcho1.Port:=80;
IdEcho1.Connect(1000);
except
ShowMessage('Nie wykryto połączenia !');
end;

A ja sobie używam coś takiego i jeszcze mnie cholerstwo nie zawiodło :PPP

Function InternetConnection:Boolean;
Var
St : Integer;
Begin
Result:=InternetGetConnectedState(@St, 0);
End;

PS
Do Uses należy dodać: WinInet - o ile mnie baniak nie oszukuje :D

przykro mi, u mnie nie działa :)
wylaczam neta, lana , wszystko , a zawsze mam "online" :p

Pytanie co zrobić aby to zyło dobrze pod Win98, pod ME i innybi połączenie jest wykrywane OK, testowałem ten komponent, który jest chyba na podstawie tego napisany, testowałem ten przykład i oba się zachowują tak samo Win98 twierdzi że ciągle ma połączenie nawet jak wyciągnę wtyczkę z sieciówki.

Dziala ale dopiero jak dodam to:
function InetIsOffline(Flag: Integer): Boolean; stdcall;
external 'URL.DLL';
w sekci implentation.

Że tak głupio spytam ... !!
O chuj tu chodzi ....?????????????????