Jak w temacie czyli jak wykryć połączenie z netem?
Znalazłem w FAQu:
http://4programmers.net/Delphi/FAQ/Sieć/Internet/Jak_wykryć_połączenie_z_netem
ale to nie działa u mnie. Zna ktoś inny sposób?
A dodales do sekcji Uses modul WinInet?
Oczywiście :) Ale nie działa. Bez względu na to czy jest połączony czy nie zwraca wartość true
http://www.torry.ru/pages.php?id=222
Tu maszkomponenty do wykrywania neta.
bzdura
DZIAŁA :-D :-)
Spróbuj tego:
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
Result:= InternetCheckConnection(INTERNET_PING_SITES[dwFlags], FLAG_ICC_FORCE_CONNECTION, 0);
if Result then
Break;
end;
end;
Nie wiem czy sposób, ktory podal mgyver wykryje sieć jeżeli mamy połączenie z routerem, a ów router już z
siecią połączenie nie ma. Polecam sprawdzić poprzez pingowanie po IP jakiegoś popularnego adresu, który to
się nie zmienia. Przykładem jest www.wp.pl. Dlaczego po IP? A no dlatego, że wtedy odpowiedź dostaniemy,
o wiele szybciej przy braku połącznie niż pingując adres po nazwie. Tylko najpierw należy pobrać sobie źródła
komponentu DPing z adresu: Dwa w jednym czyli jak napisać komponent i wysłać pinga i użyć kodu:
unit pingowanie;
interface
uses
Classes, Forms, DPing;
type
TPinger = class(TObject)
private
CzyJestInterNet : boolean;
procedure PingerOdpowiedzi(Sender : TObject; ReplyStatus : TReplyStatus; ReplyTime : Integer);
public
constructor Create(var Rezultat : boolean);
end;
const
AdresDoPingowania = 'www.wp.pl';
function CzyJestPolaczenieInternetowe : boolean;
implementation
procedure TPinger.PingerOdpowiedzi(Sender : TObject; ReplyStatus : TReplyStatus;
ReplyTime : Integer);
begin
CzyJestInterNet := ReplyStatus = rsLives;
end;
constructor TPinger.Create(var Rezultat : boolean);
const
IleRazyMapingowac = 3;
Ping_Limit_Czasu_MS = 500;
Pinguj_Adres_IP = '212.77.100.101';
var
I : Byte;
Pinger : TDPing;
begin
Rezultat := False;
CzyJestInterNet := False;
Pinger := TDPing.Create(Application);
Pinger.TimeOut := Ping_Limit_Czasu_MS;
Pinger.OnReply := PingerOdpowiedzi;
Pinger.Host := Pinguj_Adres_IP;
for I := 1 to IleRazyMapingowac do
begin
try
Pinger.Ping;
except
CzyJestInterNet := False;
end;
if CzyJestInterNet = True then
begin
Break;
end;
end;
Rezultat := CzyJestInterNet;
end;
function CzyJestPolaczenieInternetowe : boolean;
var
Pinger : TPinger;
JestInterNet : boolean;
begin
JestInterNet := False;
Pinger := TPinger.Create(JestInterNet);
Result := JestInterNet;
Pinger.Free;
end;
end.
Tak się akurat mi przypadkiem zdażyło że w czasie testów soft który pisze sie wywalał. Dopiero po czasie zajażyłem że neta nie mam chociaż jestem z ruterem połączony (vectra nawaliła, LAN działał bez zarzutu). Wiec na czas testów wypie****m odwołanie sie do funkcji IsNet.
Działa dobrze. A w czasie testów to nawet za dobrze :-)