//---------------------------------------------------------------------------
// 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;
}
|