Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Prüfen ob Pc online (https://www.delphipraxis.net/55461-pruefen-ob-pc-online.html)

simonko 21. Okt 2005 13:24


Prüfen ob Pc online
 
Wie kann ich prüfen ob eine Verbindung zur Zeit zum internet besteht oder nicht?

DataCool 21. Okt 2005 13:30

Re: Prüfen ob Pc online
 
Hi,

da gibt es so viele Möglichkeiten ;-)

- Versuch eine IP im Netz zu pingen, bekommst Du ne Antwort bist du online.

- Versuch mit Indys TIdHttp eine URL zu erreichen, bekommst Du eine Antwort bist Du online.

.....

Als Ansatz sollte das allemal reichen oder ?

Gruß Data

RavenIV 21. Okt 2005 13:30

Re: Prüfen ob Pc online
 
das einfachste:
such dir einen verlässlichen Server (z.B. www.arcor.de) und mach einen ping auf diesen server.
Wenn der ping OK ist, dann haste Verbindung...

TeronG 21. Okt 2005 13:33

Re: Prüfen ob Pc online
 
Zitat:

Zitat von DataCool
- Versuch eine IP im Netz zu pingen, bekommst Du ne Antwort bist du online.

LOOOL .. sobald ich ne IP außerhalb meines Netzwerkes anpinge wähle ich mich auch schon in's netz ein...

Zitat:

da gibt es so viele Möglichkeiten ;-)
Für deinen eigenen Rechner mag es eine Möglichkeit geben .. aber KEINE, die allgemeingültig ist.

Chegga 21. Okt 2005 13:33

Re: Prüfen ob Pc online
 
Hi,

durch die DP-Suche hättest du diesen Beitrag gefunden:
OnlineStatus
...lesen...

MfG Marc

simonko 21. Okt 2005 13:37

Re: Prüfen ob Pc online
 
Ich möcht ein programm schreiben dass mir die internetstunden zählt die ich online bin, weil
ich hab nur 200 freistunden. mit einem timer jede sekunde www.arcord.de pingen klingt irgendwie
blöd oder?

TeronG 21. Okt 2005 13:38

Re: Prüfen ob Pc online
 
so ... endlich gefunden :)
klick (@Daniel: das ding find ich Spitze :mrgreen:)

Wenn du nen Router hast kannste das mit dem PINGEN eh vergessen, weil der bei jedem ping einwählen würde allerdings kannse der Router evtl. befragen ob er online ist ... aber zu dem Thema steht in der DP schon genug :mrgreen:

DataCool 21. Okt 2005 13:39

Re: Prüfen ob Pc online
 
Hi,

eine allgemein gültige Methode gibt es nicht.
Wird ja auch in dem Link den Chegga gepostet hat deutlich.

Eigentlich kann man nur mit meheren kombinierten Methoden zum Ziel kommen.

- Prüfen, ob Netzwerkkabel angeschlossen ist
- Wenn ja dann ne URL zur Sicherheit pingen

Gruß Data

TeronG 21. Okt 2005 13:42

Re: Prüfen ob Pc online
 
Zitat:

Zitat von DataCool
- Prüfen, ob Netzwerkkabel angeschlossen ist

und was wennich n Modem und daher KEIN Netzwerkkabel hab?
Zitat:

- Wenn ja dann ne URL zur Sicherheit pingen
Router .... (mehr sog i ned) ^^

PS: auf link s.o. verweis ... bitte durchlesen ^^

DataCool 21. Okt 2005 13:53

Re: Prüfen ob Pc online
 
Hi,

noch ne Methode, aber gleich vorweg um TeronG ruhig zu stellen ;-)
Eine definitiv sichere Methode gibt es nicht :

Delphi-Quellcode:
{*************************************************************}
{            INetDetector Component for Delphi 32             }
{ Version:  2.1                                              }
{ E-Mail:   [email]info@utilmind.com[/email]                               }
{ Home Page: [url]http://www.utilmind.com[/url]                         }
{ Created:  November 5, 1999                                 }
{ Modified: November 12, 1999                                }
{ Legal:    Copyright (c) 1999, UtilMind Solutions          }
{*************************************************************}
{ This component determines online status of the computer    }
{ (Connected or Disconnected).                               }
{*************************************************************}
{ PROPERTIES:                                                }
{   Online: Boolean - Online status of local machine         }
{   DispatchInterval - Determines in milliseconds the        }
{                      intervals of time between checking    }
{                      online of a mode of the computer      }
{   Enabled: Boolean - As usual... =) If True then often     }
{                      queries for Internet Connection       }
{ EVENTS:                                                    }
{   OnChanged - causes if online status changed.             }
{*************************************************************}
{ Please see demo program for more information.              }
{*************************************************************}
{                     IMPORTANT NOTE:                        }
{ This software is provided 'as-is', without any express or  }
{ implied warranty. In no event will the author be held      }
{ liable for any damages arising from the use of this        }
{ software.                                                  }
{ Permission is granted to anyone to use this software for   }
{ any purpose, including commercial applications, and to     }
{ alter it and redistribute it freely, subject to the        }
{ following restrictions:                                    }
{ 1. The origin of this software must not be misrepresented, }
{    you must not claim that you wrote the original software. }
{    If you use this software in a product, an acknowledgment }
{    in the product documentation would be appreciated but is }
{    not required.                                           }
{ 2. Altered source versions must be plainly marked as such, }
{    and must not be misrepresented as being the original    }
{    software.                                               }
{ 3. This notice may not be removed or altered from any      }
{    source distribution.                                    }
{*************************************************************}

{*************************************************************}
{            --------------------------------------           }
{ Version:  2.1D                                            }
{ Modified: R.L. Miller                                     }
{ E-Mail:   [email]74471.3622@compuserve.com[/email]                       }
{ Modified: December 13, 1999                                }
{ Legal:    Added several r/o properties for diagnostics    }
{*************************************************************}
{ NEW PROPERTIES:                                            }
{  CurrentIP : String (R/O runtime only).Allows me to monitor }
{              what's going on inside IsIPPresent local func }
{              inside WndProc().                             }
{  pCurrHostEnt : PHostEnt (R/O runtime only). Same reason  }
{*************************************************************}


unit INetDetector;

interface

uses
  Windows, Messages, Classes, Forms, Winsock;

type
  TINetDetector = class(TComponent)
  private
    FEnabled: Boolean;
    FDispatchInterval: Cardinal;
    FWindowHandle: hWnd;
    FOnline: Boolean;
    FOnChanged: TNotifyEvent;

    FCurrentIP : String;      {<--RLM Diagnostics}
    FpCurrHostEnt : PHostEnt; {<--RLM Diagnostics}

    procedure UpdateTimer;
    procedure SetEnabled(Value: Boolean);
    procedure SetDispatchInterval(Value: Cardinal);
    procedure SetNoneBool(Value: Boolean);
    procedure WndProc(var Msg: TMessage);
  protected
  public
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;

    property CurrentIP : String read FCurrentIP; {<--RLM Diagnostics}
    property pCurrHostEnt : PHostEnt read FpCurrHostEnt; {<--RLM Diagnostics}

  published
    property Enabled: Boolean read FEnabled write SetEnabled;
    property DispatchInterval: Cardinal read FDispatchInterval write SetDispatchInterval;
    property Online: Boolean read FOnline write SetNoneBool;
    property OnChanged: TNotifyEvent read FOnChanged write FOnChanged;
  end;

procedure Register;

implementation

{$R *.dcr}

constructor TINetDetector.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  FEnabled := True;
  FDispatchInterval := 1000;
  FWindowHandle := AllocateHWnd(WndProc);
  UpdateTimer;
end;

destructor TINetDetector.Destroy;
begin
  FEnabled := False;
  UpdateTimer;
  DeallocateHWnd(FWindowHandle);
  inherited Destroy;
end;

procedure TINetDetector.WndProc(var Msg: TMessage);
var
  OldState: Boolean;
  Key: hKey;
  PC: Array[0..4] of Char;
  Size: Integer;
  RegSays : Boolean; {<-- RLM 12/13/99}

  function IsIPPresent: Boolean;
  type
    TaPInAddr = Array[0..10] of PInAddr;
    PaPInAddr = ^TaPInAddr;
  var
    phe: PHostEnt;
    pptr: PaPInAddr;
    Buffer: Array[0..63] of Char;
    I: Integer;
    GInitData: TWSAData;
    IP: String;
  begin
    WSAStartup($101, GInitData);
    Result := False;
    GetHostName(Buffer, SizeOf(Buffer));
    phe := GetHostByName(buffer);
    FpCurrHostEnt := phe;
    if phe = nil then Exit;
    pPtr := PaPInAddr(phe^.h_addr_list);
    I := 0;
    while pPtr^[I] <> nil do
     begin
      IP := inet_ntoa(pptr^[I]^);
      Inc(I);
     end;
    FCurrentIP := IP;
    WSACleanup;
    Result := (IP <> '') and (IP <> '127.0.0.1');
  end;

  procedure FixOnlineState;
  begin
    if (not OldState and FOnline) or
       (OldState and not FOnline) then
       if Assigned(FOnChanged) then
        FOnChanged(Self);
  end;

begin    
  with Msg do
   if Msg = wm_Timer then
    try
     OldState := FOnline;
     FOnline := IsIPPresent;
     FixOnlineState;

     if RegOpenKey(HKEY_LOCAL_MACHINE, 'System\CurrentControlSet\Services\RemoteAccess', Key) = ERROR_SUCCESS then
      begin
       Size := 4;
       if RegQueryValueEx(Key, 'Remote Connection', nil, nil, @PC, @Size) = ERROR_SUCCESS then
        begin
         {Original}
         {
         FOnline := PC[0] = #1;
         FixOnlineState;
         }
         {Changed 12/13/99 RLM -- AOL leaves PC bytes all 00's}
         RegSays := PC[0] = #1;
         FOnLine := FOnLine or RegSays;
         FixOnlineState;
        end
       else
        begin
         FOnline := IsIPPresent;
         FixOnlineState;
        end;
       RegCloseKey(Key);
      end
     else
      begin
       FOnline := IsIPPresent;
       FixOnlineState;
      end;
    except
     Application.HandleException(Self);
    end
   else
    Result := DefWindowProc(FWindowHandle, Msg, wParam, lParam);
end;

procedure TINetDetector.UpdateTimer;
begin
  KillTimer(FWindowHandle, 1);
  if (FDispatchInterval <> 0) and FEnabled then
   SetTimer(FWindowHandle, 1, FDispatchInterval, nil);
end;

procedure TINetDetector.SetEnabled(Value: Boolean);
begin
  if Value <> FEnabled then
   begin
    FEnabled := Value;
    UpdateTimer;
   end;
end;

procedure TINetDetector.SetDispatchInterval(Value: Cardinal);
begin
  if Value <> FDispatchInterval then
   begin
    FDispatchInterval := Value;
    UpdateTimer;
   end;
end;

procedure TINetDetector.SetNoneBool(Value: Boolean); begin {} end;

procedure Register;
begin
  RegisterComponents('Standard', [TINetDetector]);
end;

end.

moritz 21. Okt 2005 13:54

Re: Prüfen ob Pc online
 
Nur ales kurzer Hinweis dafür: Selbst Steam prüft einfach nur, ob es Verbindung zum Steam-Server aufnehmen kann - Wenn nicht, wird der Offline-Modus gestartet. Wenn es selbst bei Valve so gemacht wird, wieso sollte es eine bessere Lösung geben?

TeronG 21. Okt 2005 14:02

Re: Prüfen ob Pc online
 
@DATA: :mrgreen:
Zitat:

Zitat von moritz
Nur ales kurzer Hinweis dafür: Selbst Steam prüft einfach nur, ob es Verbindung zum Steam-Server aufnehmen kann - Wenn nicht, wird der Offline-Modus gestartet. Wenn es selbst bei Valve so gemacht wird, wieso sollte es eine bessere Lösung geben?

Wer sagt, daß das ne gute Lösung sein muss nur weil es Valve so macht?
Da ich zuhause ne echt (Zeit & Volumen-unabhängige) Flat habe is mir das wurst .. aber wenn ich nur X Std on sein dürfte würd ich wohl Steam nur nach ziehen des Netzkabels starten.:zwinker:

(PS/OT: Bei mir sind bei Steam alle beschriftungen flöten gegangen ... und das obwohl das Valve geproggt hat :shock: )

moritz 21. Okt 2005 14:04

Re: Prüfen ob Pc online
 
Moin!

Ich sag ja nicht, dass es eine gute Lösung ist. Ich hab nur gesagt, dass es anscheinend keine bessere Lösung zu geben scheint, wenn sogar Valve es so löst. (Es kann natürlich sein, dass es trotzdem eine gibt, aber es scheint sonst noch keiner draufgekommen zu sein ;))

Gruß

mh166 21. Okt 2005 18:58

Re: Prüfen ob Pc online
 
Zitat:

Zitat von moritz
Ich sag ja nicht, dass es eine gute Lösung ist.

Ist es auch nich. Versuch einfach mal nen enstprechenden Eintrag im LMHOSTS-File anzulegen. Sollte funktionieren, hab ich aber nich getestet. Was allerdings funktioniert: z.B. einfach im DNS-Server - sofern du in deinem Netzwerk einen besitzt - einen entsprechenden Eintrag erstellen, der ins Nirvana zeigt. Schon is Schicht im Schacht...

Soll heißen, es gibt immer Mittel und Wege und der von Valve is nich unbedingt der Beste aber wohl der einfachste und im allgemeinen gebräuchlichste, nehm ich mal an.

so far...
mfg, mh166

PaulJr 13. Nov 2007 13:55

Re: Prüfen ob Pc online
 
Hallo Programmierer, :???:

ich habe lange hier gesucht um eine Antwort auf meine Frage zu finden und habe mich
entschlossen dieses Thema noch einmal zu beleben.

In meiner Anwendung kann ein User auf Hilfe-Button anklicken.

Somit greift er auf unsere Online-Hilfe. Nun möchte ich an dieser Stelle schon vorher

wissen, ob er Online ist (bzw. viel wichtiger) ob er Online „gehen“ kann (da er in diesem

Augenblick nicht Online sein muss).

Kann er nicht Online gehen, da er z.B. gerade in einem Zug (ohne Internet Verbindung) mit

einem Notebook arbeitet möchte ich die Hilfe automatisch auf

ein lokales Verzeichnis umleiten…

-------------------------------------------------------------------
Vielleicht weiß inzwischen jemand wie ich das lösen könnte…

Viele Grüße :)

PaulJr.

Ralf Kaiser 13. Nov 2007 15:41

Re: Prüfen ob Pc online
 
Zitat:

Zitat von simonko
Wie kann ich prüfen ob eine Verbindung zur Zeit zum internet besteht oder nicht?

Zu dem Thema sollte man sich das mal durchlesen! :)

Die Muhkuh 13. Nov 2007 15:45

Re: Prüfen ob Pc online
 
Das Thema ist über 2 Jahre alt und der Link wurde schon verlinkt. Bitte erstmal lesen und dann posten!

Dunkel 13. Nov 2007 18:17

Re: Prüfen ob Pc online
 
Einfache und (einzig) sichere Methode: den User fragen. {Punkt}

PaulJr 14. Nov 2007 09:44

Re: Prüfen ob Pc online
 
Hallo Programmierer, :???:

leider läuft in dem Link der Hinweis auf die Funktion RASEnumConnections ins Leere...

Viele Grüße

Paul Jr.

alzaimar 14. Nov 2007 10:43

Re: Prüfen ob Pc online
 
Du musst auf das Timeout warten, eine andere Möglichkeit gibt es nicht.

Was bei einem Laptop im Zug funktionieren dürfte, klappt hinter einem Router oder in einem Firmennetzwerk einfach nicht zuverlässig (ping o.ä.)

Die Frage kann nicht lauten 'ist der User "online"?', sondern 'ist Eure online-hilfe erreichbar?'.

PaulJr 14. Nov 2007 11:48

Re: Prüfen ob Pc online
 
Danke alzaimar :???:

so gesehen komme schon zu Recht...

Viele Grüße

PaulJr.


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:46 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz