C++ Builder Snippets  

Prüfen, ob eine Internet-Verbindung besteht:

//---------------------------------------------------------------------------
// Funktion GetInternetConnected() prüft, ob eine Internet-Verbindung besteht
//---------------------------------------------------------------------------
// Rückgabewert: true falls eine Inter- / Intranetverbindung möglich ist,
//               anderenfalls false.
// Parameter:    Zeiger auf eine TStrings-Instanz für die Ausgabe der
//               Status- und Fehlermeldungen.
//
// Beispielaufruf:
//
// /* mit Ausgabe von Statusmeldungen in der TMemo-Komponente namens Memo1:*/
// if(GetInternetConnected(Memo1->Lines))
//    ShowMessage("Inter- / Intranetverbindung scheint zu bestehen...");
// /* ohne Ausgabe von Statusmeldungen: */
// if(GetInternetConnected(NULL))
//    ShowMessage("Inter- / Intranetverbindung scheint zu bestehen...");
//---------------------------------------------------------------------------
// Hinweis: GetInternetConnected() kapselt den Aufruf der API-Funktion
//          InternetGetConnectedState() aus der wininet.dll. Diese Funktion
//          liefert true auch wenn der Rechner nur an ein TCP/IP-Netzwerk
//          angeschlossen ist, bzw wenn ein Proxy-Server konfiguriert ist.
//          Der Rückgabewert 'true' ist daher mit Vorsicht zu geniessen: es
//          heisst noch lange nicht, dass die Verbindung zum Internet
//          tatsächlich besteht. Sollte die GetInternetConnected() also 'true'
//          liefern, könnte je nach Einzelfall eine Absicherung (z.B. durch
//          das Senden eines Pings zum Zielrechner) durchaus sinnvoll sein.
//---------------------------------------------------------------------------
#include <wininet.h>
typedef BOOL (WINAPI *PF_INETGETCONNECTEDSTATE)(LPDWORD, DWORD);

bool GetInternetConnected(TStrings* pStrings)
{
  bool blRetVal;  // Rückgabewert
  if(pStrings) pStrings->Clear();

  // WININET.DLL laden:
  HANDLE hWinInet = LoadLibrary("WININET.DLL");
  if(hWinInet == NULL)
  {
    if(pStrings)
      pStrings->Add("Fehler: WININET.DLL konnte nicht geladen werden !");
    return false;
  }

  // Zeiger auf die Funktionen besorgen:
  PF_INETGETCONNECTEDSTATE pfInternetGetConnectedState =
    (PF_INETGETCONNECTEDSTATE) GetProcAddress(
     hWinInet, "InternetGetConnectedState");
  if(pfInternetGetConnectedState == NULL)
  {
    if(pStrings)
      pStrings->Add("Fehler: Bestimmung der Adresse der Funktion "
      "InternetGetConnectedState() fehlgeschlagen !");
    if(hWinInet) FreeLibrary(hWinInet);
    return false;
  }

  // Verbidungsstatus abfragen:
  DWORD dwFlags;
  blRetVal = pfInternetGetConnectedState(&dwFlags, 0);
  if(blRetVal && pStrings)
  {
    pStrings->Add("Inter- Intranet-Verbindung besteht !");
    if (dwFlags & INTERNET_CONNECTION_LAN)
      pStrings->Add("LAN-Verbindung");
    if (dwFlags & INTERNET_CONNECTION_MODEM)
      pStrings->Add("Aktive Modem-Verbindung");
    if (dwFlags & INTERNET_CONNECTION_PROXY)
      pStrings->Add("Verbindung über einen Proxy-Server");
  }
  else if(pStrings) pStrings->Add("Keine Inter- /Intranetverbindung!");

  // Aufräumen:
  if(hWinInet) FreeLibrary(hWinInet);

  return blRetVal;
}

© '99-2001 by S. Kreutzmann