Autor Beitrag
F.Art
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 434



BeitragVerfasst: Sa 04.01.03 19:04 
Ich möchte ein Programm schreiben das checkt ob eine Internetverbindung besteht und wenn nicht das eine message kommt wo man mit ja oder nein antworten kann.Bei ja soll dann eine hergestellt werden.
Leathl
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 276



BeitragVerfasst: Sa 04.01.03 22:31 
---


Zuletzt bearbeitet von Leathl am So 16.08.09 13:54, insgesamt 1-mal bearbeitet
torstenheinze
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 461



BeitragVerfasst: Sa 04.01.03 22:44 
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
uses WinInet;

procedure TForm1.Button1Click(Sender: TObject);
begin
  If InternetGetConnectedState(nil, 0) then
    Caption := 'Online'
  else
   Caption:='Offline';
end;

mit der massage, das kannst du ja selber
F.Art Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 434



BeitragVerfasst: So 05.01.03 14:49 
Soweit ist es wie ich es gerne hätte beide Varianten kann ich verwerten. Aber wie kann ich eine Message machen wo ich auswählen kann yes or no?Und wie kann ich das machen das wenn keine Verbindung steht er auf aufforderung eine herstellt?

if IdIPWatch.IsOnline then goto Start else begin showmessage('Es besteht keine Internet Verbindung'); goto Ende; end;

Das klappt nicht ganz wenn er on ist ist alles ok aber bei off nicht.
Ex0rzist
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 550

Win XP Prof.
Mandrake 10.0

D6
BeitragVerfasst: So 05.01.03 18:03 
Hallo,

versuche es mal so:

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
Uses WinInet;
...
Procedure VerbdgHerstellen;
begin
If not IdIPWatch1.IsOnline then
  begin
   If MessageDlg('Sie sind offline. Jetzt verbinden?', 
    mtConfirmation, [mbYes, mbNo], 0) = mrYes then  //Hier ist die Abfrage
      begin 
        if not InternetAutodial(INTERNET_AUTODIAL_FORCE_ONLINE or 
        INTERNET_AUTODIAL_FORCE_UNATTENDED, 0) then  //es wird versucht, die Standard-DFÜ-Verbindung                                                       //herzustellen
        begin 
         Showmessage('Es konnte keine Verbindung hergestellt werden.'); //Fehlernachricht
        end;
      end;
  end;
end;


Der Code ist ungetestet, müsste aber funktionieren.
Schlecht sieht es allerdings aus, wenn du DSL hast. Denn sobald ein Kabel in die Netzwerkkarte gesteckt ist, denkt Windows, dass du Online bist.

_________________
If accidentally read, induce vomitting.
F.Art Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 434



BeitragVerfasst: So 05.01.03 18:31 
Ich muss dich etwas korigieren.
Ich habe DSL und wenn ich Off bin meldet er mir das und wenn ich auf Ja drücke wählt er sich auch ein. Leider zeigt er mir immer off an auch wenn ich on bin.Jetzt muss das halt nurnoch stimmen dann ist es wie ich es möchte.

Aber THX für die Hilfe
Ex0rzist
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 550

Win XP Prof.
Mandrake 10.0

D6
BeitragVerfasst: So 05.01.03 19:04 
Was hast du für ein Betriebssystem?
Wann wird bei dir geprüft, ob du online bist?

Ich habe mal ein Programm geschrieben, dass sich automatisch wieder einwählt, wenn die Verbindung unterbrochen wurde.
Ich nutze auch DSL und bei mir zeigt er den Online/Offline-Status korrekt an.

Vielleicht hilft es, wenn du ein bisschen Code postest.

_________________
If accidentally read, induce vomitting.
F.Art Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 434



BeitragVerfasst: So 05.01.03 19:08 
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
procedure TForm1.InfosClick(Sender: TObject);
begin

If not IdIPWatch.IsOnline then
  begin
  If MessageDlg(' Sie sind offline.'#13'Jetzt verbinden?',
     mtConfirmation, [mbYes, mbNo], 0) = mrYes then begin
     if not InternetAutodial(INTERNET_AUTODIAL_FORCE_ONLINE or
        INTERNET_AUTODIAL_FORCE_UNATTENDED, 0) then begin
         Showmessage('Es konnte keine Verbindung hergestellt werden.');
  end;
end;
end;

bei Modem und DSL gibt es bei mir keinen unterschied. Ich habe WinXP es soll aber für alle Windows versionen gehen.

(05.01. 19:20 Tino) Code-Tags hinzugefügt.
Ex0rzist
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 550

Win XP Prof.
Mandrake 10.0

D6
BeitragVerfasst: So 05.01.03 19:16 
Den Code kenne ich ja schon. :wink:

Ich habe einen Timer benutzt, der alle paar Sekunden prüft, ob man online ist.
Wie machst du das?

Ich befürchte nämlich, dass du nachdem du wieder online bist, nicht den Online/Offline Status neu ermittelst.

_________________
If accidentally read, induce vomitting.
F.Art Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 434



BeitragVerfasst: So 05.01.03 20:51 
Ich habe ein Email Programm geschrieben und wenn man auf Senden klickt soll er checken ob eine INet verbindung besteht oder nicht.Wenn nicht dann soll er die herstellen wenn man yes drückt.
F.Art Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 434



BeitragVerfasst: Do 09.01.03 00:13 
Titel: gelöst
Das habe ich so gelöst wie folgt aber ich bin nicht ganz zufrieden ist einfach zuviel Text. Müsste was gekürzt werden.
ausblenden volle Höhe Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
125:
126:
127:
128:
129:
130:
131:
132:
133:
134:
135:
unit Unit1;
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  WinInet, Registry, WinSock;
type
  TForm1 = class(TForm)
    Senden: TFlatSpeedButton;
  private
  public
  end;
const
  cERROR_BUFFER_TOO_SMALL = 603;
  cRAS_MaxEntryName = 256;
  cRAS_MaxDeviceName = 128;
  cRAS_MaxDeviceType = 16;

type
  TConnectionType = (ctNone, ctProxy, ctDialup);
  ERasError = class(Exception);
    HRASConn = DWord;
    PRASConn = ^TRASConn;
    TRASConn = record
      dwSize: DWORD;
      rasConn: HRASConn;
      szEntryName: array[0..cRAS_MaxEntryName] of Char;
      szDeviceType: array[0..cRAS_MaxDeviceType] of Char;
      szDeviceName: array [0..cRAS_MaxDeviceName] of char;
    end;
    TRasEnumConnections = function (RASConn: PrasConn; var BufSize: DWord;
     var Connections: DWord): LongInt; stdcall;


var
  Form1: TForm1;
  zuverf,accounttext  :string;
function ConnectedToInternet: TConnectionType;
function RasConnectionCount: Integer;
implementation
uses Unit2, Unit3, Unit4;
{$R *.dfm}

function ConnectedToInternet: TConnectionType;
var Reg: TRegistry;
  bUseProxy: Boolean;
  UseProxy: LongWord;
begin
  Result := ctNone;
  Reg := TRegistry.Create;
  with REG do
    try
      try
        RootKey := HKEY_CURRENT_USER;
        if OpenKey('Software\Microsoft\WindowsCurrentVersion\Internet settings',
        false) then begin
          if GetDataType('ProxyEnable') = rdBinary then
            ReadBinaryData('ProxyEnable', UseProxy, SizeOf(LongWord))
          else begin
            bUseProxy := ReadBool('ProxyEnable');
            if bUseProxy then UseProxy := 1
            else UseProxy := 0;
          end;
          if (UseProxy<>0) and (ReadString('ProxyServer')<>'' ) then Result := ctProxy;
        end;
      except
      end;
    finally
      Free;
    end;
    if Result = ctNone then begin
      if RasConnectionCount > 0 then Result := ctDialup;
    end;
end;

function RasConnectionCount: Integer;
var RasDLL: HInst;
  Conns: array[1..4] of TRasConn;
  RasEnums: TRasEnumConnections;
  BufSize: DWord;
  NumConns: DWord;
  RasResult: Longint;
begin
  Result := 0;
  RasDLL := LoadLibrary('rasapi32.dll');
  if RasDLL = 0 then exit;
  try
    RasEnums := GetProcAddress(RasDLL,'RasEnumConnectionsA');
    if @RasEnums = nil then
      raise ERasError.Create('RasEnumConnectionsA not found in rasapi32.dll');
    Conns[1].dwSize := Sizeof (Conns[1]);
    BufSize := SizeOf(Conns);
    RasResult := RasEnums(@Conns, BufSize, NumConns);
    if (RasResult = 0) or (Result = cERROR_BUFFER_TOO_SMALL) then Result := NumConns;
  finally
    FreeLibrary(RasDLL);
  end;
end;

procedure delay(msec:longint);
var
start,stop:longint;
begin
start := gettickcount;
repeat
stop := gettickcount;
application.processmessages;
until (stop - start ) >= msec;
end;

procedure TForm1.SendenClick(Sender: TObject);
label Ende;
label INet;
label Einwahl;
var
  Status: TConnectionType;
  sMsg: string;
begin
  Status := ConnectedToInternet;
  if Status = ctDialup then goto INet;
  if Status = ctNone then goto Einwahl;
  if Status = ctProxy then goto Einwahl;
  ShowMessage(string(sMsg));
  goto Einwahl;
Einwahl:;
If MessageDlg('Sie sind nicht mit dem Internet verbunden!'#13'       möchten Sie sich jetzt einwählen?',
   mtConfirmation, [mbYes, mbNo], 0) = mrYes
   then
   InternetAutodial(INTERNET_AUTODIAL_FORCE_ONLINE or INTERNET_AUTODIAL_FORCE_UNATTENDED, 0)
   else goto Ende;
delay(10000);
INet:;
Ende:;
end;

end.


(09.01. 08:49 Tino) Code-Tags hinzugefügt.
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Do 09.01.03 09:40 
F.Art hat folgendes geschrieben:
Müsste was gekürzt werden.

Ach, findest du? :mrgreen: Ich benutze folgende Funktion in einem aktuellen Projekt, wobei ich zwar den Online-Status checke, aber zur Sicherheit auch nach einem Mailserver suche. Man kann natürlich auch eine URL angeben und erhält dann deren IP:
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
uses
  WinInet, WinSock;

function IsOnline(const szUrl: string; var UrlIp: dword): boolean;
var
  hostent    : pHostent;
begin
  // Internetverbindung prüfen
  Result     := (InternetGetConnectedState(nil,0));
  UrlIp      := 0;

  // angeblich gibt´s eine
  if(Result) then begin
    // zur Sicherheit: URL testen
    hostent  := gethostbyname(@szUrl[1]);
    // tatsächlich; es gibt eine Verbindung
    Result   := hostent <> nil;

    // ok, dann will ich die IP zur URL haben
    if(Result) then
      UrlIp  := integer(pointer(hostent^.h_addr_list^)^);
  end;
end;

Achtung! Die IP wird in der "network byte order" zurückgegeben, da ich sie so auch zum Verbinden mit dem Mail-Server brauche.

Edit-PS: "WsaStartup" und "WsaCleanup" nicht vergessen. Habe ich nicht in obigem Code, weil beide Anweisungen im Hauptteil des Programms stehen. Damit die Sache (sprich: "gethostbyname") auch klappt, muss das noch ins Programm bzw. in die Funktion:
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
if(WsaStartup(MAKEWORD(1,1),wsadata) = 0) then
try
  { ... }
finally
  WsaCleanUp;
end;
bf109g.01
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 84



BeitragVerfasst: Mo 13.02.12 19:46 
user profile iconMathiasSimmack hat folgendes geschrieben Zum zitierten Posting springen:

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
uses
  WinInet, WinSock;

function IsOnline(const szUrl: string): boolean;
var
  hostent    : pHostent;
begin
  // Internetverbindung prüfen
  Result     := (InternetGetConnectedState(nil,0));
  UrlIp      := 0;

  // angeblich gibt´s eine
  if(Result) then begin
    // zur Sicherheit: URL testen
    hostent  := gethostbyname(@szUrl[1]);
    // tatsächlich; es gibt eine Verbindung
    Result   := hostent <> nil;

  end;
end;


Hallo, ich habe gerade genauso ein problem. Ich habe jetzt den Programmcode so ^^ eingefügt, und rufe ihn so auf:
ausblenden Delphi-Quelltext
1:
If IsOnline('http://www.google.de/')=true then					


Es macht aber keinen Unterschied. Wenn ich "=true" frage, ist es immer true, wenn ich "=false" frage, ist es immer false. Was habe ich daran nicht verstanden?
Martok
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 3661
Erhaltene Danke: 604

Win 8.1, Win 10 x64
Pascal: Lazarus Snapshot, Delphi 7,2007; PHP, JS: WebStorm
BeitragVerfasst: Mo 13.02.12 20:41 
user profile iconbf109g.01 hat folgendes geschrieben Zum zitierten Posting springen:
Es macht aber keinen Unterschied. Wenn ich "=true" frage, ist es immer true, wenn ich "=false" frage, ist es immer false. Was habe ich daran nicht verstanden?
Dass man nicht auf true vergleicht.

_________________
"The phoenix's price isn't inevitable. It's not part of some deep balance built into the universe. It's just the parts of the game where you haven't figured out yet how to cheat."
bf109g.01
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 84



BeitragVerfasst: Di 14.02.12 16:12 
user profile iconMartok hat folgendes geschrieben Zum zitierten Posting springen:
Dass man nicht auf true [url=www.delphi-forum.de/...60]vergleicht[/url].

Danke für den Hinweis. Allerdings ist das Problem nach Korrektur dieses Schönheitsfehlers noch immer das gleiche.
Ich bin per WLAN verbunden und die Überprüfung liefert nun immer false als Rückgabewert.

Ich rufe die Funktion jetzt so auf:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
      If not IsOnline('http://www.google.de/'then
          begin
            Textfarbe(5); Write('ERROR:'); Textfarbe(7);
            WriteLN(' No internet connection.');WriteLN;
          end
        else
          begin
            WriteLN('+ Internet connection established.');WriteLN;


Jetzt bekomme ich immer:
"No internet connection" angezeigt. Kann es sein, dass die URL nicht richtig übergeben wird?
Nersgatt
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1581
Erhaltene Danke: 279


Delphi 10 Seattle Prof.
BeitragVerfasst: Di 14.02.12 16:29 
Die Funktion nutzt doch "GetHostByName". Zum Host gehört aber keinesfalls das Protokoll (http).
Versuch also mal die Funktion nur mit google.de aufzurufen.

_________________
Gruß, Jens
Zuerst ignorieren sie dich, dann lachen sie über dich, dann bekämpfen sie dich und dann gewinnst du. (Mahatma Gandhi)

Für diesen Beitrag haben gedankt: Martok
Horschdware
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 744
Erhaltene Danke: 54

Win XP Pro, Win 7 Pro x64
Delphi 7, Delphi XE, C++ Builder 5, SAP R/3
BeitragVerfasst: Di 14.02.12 16:48 

_________________
Delphi: XE - OS: Windows 7 Professional x64

Für diesen Beitrag haben gedankt: baka0815, Tastaro
bf109g.01
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 84



BeitragVerfasst: Di 14.02.12 20:36 
user profile iconNersgatt hat folgendes geschrieben Zum zitierten Posting springen:
Versuch also mal die Funktion nur mit google.de aufzurufen.

Probiert und geht nicht. :(
Was jetzt?
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10183
Erhaltene Danke: 1256

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Di 14.02.12 22:46 
Moin!

user profile iconbf109g.01 hat folgendes geschrieben Zum zitierten Posting springen:
Was jetzt?
Um es kurz zu machen: man kann nicht zweifelsfrei erkennen, ob ein Rechner mit "dem Internet" verbunden ist, aus den verschiedensten Gründen. Das einzig sinnvolle ist den User zu fragen ob eine Internetverbindung möglich ist (sein sollte? oder erlaubt ist?) und dann den Zugriff probieren. :idea:

Es gibt offensichtlich wirklich immer noch Leute, die nicht wissen, dass ein Verbindungstest erst der Auslöser für einen Verbindungsaufbau ist, und dass es komische Tarifmodelle gibt, die sowas gar nicht lustig finden... :idea: :|

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
Tastaro
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 414
Erhaltene Danke: 23



BeitragVerfasst: Mi 15.02.12 08:36 
user profile iconbf109g.01 hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconNersgatt hat folgendes geschrieben Zum zitierten Posting springen:
Versuch also mal die Funktion nur mit google.de aufzurufen.

Probiert und geht nicht. :(
Was jetzt?


Der Rechner der angesprochen werden soll "heißt" nicht www.google.de und auch nicht google.de, sondern www.google.de.