// Hiermit kann man testen, ob eine Internetverbindung besteht.

// Variante 0.9

// Getestet mit D2010 unter W7

function connect(lpdwFlags: LPDWORD): Boolean; 
const 
  DLL = 'wininet.dll'; 
var 
  hDLL: THandle; 
  State: function(lpdwFlags: LPDWORD; dwReserved: DWORD): BOOL; 
stdcall; 
begin 
  Result := false; 
  hDLL := LoadLibrary(DLL); 
  if hDLL > 0 then 
  begin 
    @State := GetProcAddress(hDLL, 'InternetGetConnectedState'); 
    if Assigned(State) then 
    begin 
      Result := State(lpdwFlags, 0); 
    end; 
    FreeLibrary(hDLL); 
  end; 
end; 
 
function inet: Boolean; 
var 
  dw: Cardinal; 
begin 
  try 
    dw := 15; 
    Result := connect(@dw); 
  except 
    Result := false; 
  end; 
end; 
 
// Beispielaufruf 
procedure TForm1.Button1Click(Sender: TObject); 
begin 
  if inet then 
    showmessage('Verbindung steht') 
  else 
    showmessage('keine Verbindung'); 
end;
 
 

// Variante 1 (Nachteil: Nicht für NT oder höher)
// Wenn man Dauertest gleich True setzt, wird sofort ab Programmstart
//
(je nach Wert in TestIntervall) laufend geprüft.

// Getestet mit D4 unter WinME

type 
  TForm1 = class(TForm) 
    Timer1: TTimer; 
    Label1: TLabel; 
    Button1: TButton; 
    Button2: TButton; 
    procedure FormCreate(Sender: TObject); 
    procedure FormDestroy(Sender: TObject); 
    procedure Timer1Timer(Sender: TObject); 
    procedure Button1Click(Sender: TObject); 
    procedure Button2Click(Sender: TObject); 
  private 
{ Private-Deklarationen } 
  public 
    function testen: boolean; 
    procedure auswertung; 
  end; 
 
var 
  Form1: TForm1; 
 
implementation 
 
{$R *.DFM} 
 
uses registry; 
 
var 
  Reg: TRegistry; 
 
const 
  TestIntervall: cardinal = 1000; // einmal pro Sekunde 
  DauerTest: boolean = false; 
 
procedure TForm1.FormCreate(Sender: TObject); 
begin 
  Reg := TRegistry.Create; 
  Reg.RootKey := HKEY_LOCAL_MACHINE; 
  if DauerTest then 
    timer1.interval := TestIntervall 
  else timer1.interval := 0; 
end; 
 
procedure TForm1.FormDestroy(Sender: TObject); 
begin 
  Reg.Free; 
end; 
 
procedure TForm1.auswertung; 
begin 
  if testen then label1.caption := 'Es besteht eine Verbindung' 
  else label1.caption := 'keine Verbindung'; 
end; 
 
function TForm1.testen: boolean; 
var 
  buff: array[0..3] of byte; 
begin 
  result := false; 
  try 
    if Reg.OpenKey('\System\CurrentControlSet\Services\RemoteAccess', false) 
      then begin 
      Reg.ReadBinaryData('Remote Connection', buff, 4); 
      result := longword(buff) <> 0; 
    end; 
  finally 
    Reg.CloseKey; 
  end; 
end; 
 
procedure TForm1.Timer1Timer(Sender: TObject); 
begin 
  auswertung; 
end; 
 
// Einmal-Test 
procedure TForm1.Button1Click(Sender: TObject); 
begin 
  auswertung; 
end; 
 
// Dauertest 
procedure TForm1.Button2Click(Sender: TObject); 
begin 
  timer1.interval := TestIntervall; 
end;


 

// Variante 2 (Nachteil: Es muss eine zusätzliche Unit eingebunden werden)
// (auf einen Dauertest wird in diesem Beispiel verzichtet)

// Getestet mit D4 unter XP und ME

uses wininet; 
 
function InetVerbindung: boolean; 
var 
  flags: DWord; 
begin 
  if InternetGetConnectedState(@flags, 0) then begin 
    result := ((flags and $40) > 0) and ((flags and $20) = 0); 
  end else result := false; 
end; 
 
// Beispielaufruf 
procedure TForm1.Button1Click(Sender: TObject); 
var meld: string; 
begin 
  meld := 'Es ist '; 
  if not inetverbindung then meld := meld + 'k'; 
  meld := meld + 'eine Internetverbindung vorhanden.'; 
  showmessage(meld); 
end;


 

// Variante 3 (Weiterführung der Variante 2)

// Getestet mit D4 unter XP und ME

uses wininet; 
  
procedure TForm1.Button1Click(Sender: TObject); 
var 
  flags: DWord; 
  meld: string; 
const 
  no = 'Es besteht im Moment keine Internetverbindung.'; 
begin 
  if InternetGetConnectedState(@flags, 0) then begin 
    meld := ''; 
    if (flags and $40) = 0 then 
      meld := no else begin 
      meld := 'Es ist eine Internetverbindung eingerichtet.' + #13; 
      if (flags and INTERNET_CONNECTION_LAN) > 0 then 
        meld := meld + 'Die Internetverbindung erfolgt über ein Netzwerk'; 
      if (flags and INTERNET_CONNECTION_MODEM) > 0 then 
        meld := meld + 'Die Internetverbindung erfolgt über ein Modem'; 
      if (flags and INTERNET_CONNECTION_PROXY) > 0 then 
        meld := meld + ' mittels eines Proxy-Servers.' + #13 
      else meld := meld + '.' + #13; 
      if (flags and $20) > 0 then meld := meld + no; 
      if (flags and INTERNET_CONNECTION_MODEM_BUSY) > 0 then 
        meld := meld + 'Das Modem nutzt z.Zt eine andere Verbindung.'; 
      if (flags and $10) > 0 then 
        meld := meld + 'Ein Remote Access Service (RAS) ist installiert.'; 
    end; 
  end else meld := no; 
  showmessage(meld); 
end; 


Zugriffe seit 6.9.2001 auf Delphi-Ecke