Autor |
Beitrag |
F.Art
      
Beiträge: 434
|
Verfasst: 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
      
Beiträge: 276
|
Verfasst: Sa 04.01.03 22:31
Zuletzt bearbeitet von Leathl am So 16.08.09 13:54, insgesamt 1-mal bearbeitet
|
|
torstenheinze
      
Beiträge: 461
|
Verfasst: Sa 04.01.03 22:44
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 
      
Beiträge: 434
|
Verfasst: 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
      
Beiträge: 550
Win XP Prof. Mandrake 10.0
D6
|
Verfasst: So 05.01.03 18:03
Hallo,
versuche es mal so:
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 
      
Beiträge: 434
|
Verfasst: 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
      
Beiträge: 550
Win XP Prof. Mandrake 10.0
D6
|
Verfasst: 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 
      
Beiträge: 434
|
Verfasst: So 05.01.03 19:08
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
      
Beiträge: 550
Win XP Prof. Mandrake 10.0
D6
|
Verfasst: So 05.01.03 19:16
Den Code kenne ich ja schon.
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 
      
Beiträge: 434
|
Verfasst: 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 
      
Beiträge: 434
|
Verfasst: 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.
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
|
Verfasst: Do 09.01.03 09:40
F.Art hat folgendes geschrieben: | Müsste was gekürzt werden. |
Ach, findest du?  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:
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:
Quelltext 1: 2: 3: 4: 5: 6:
| if(WsaStartup(MAKEWORD(1,1),wsadata) = 0) then try { ... } finally WsaCleanUp; end; |
|
|
bf109g.01
      
Beiträge: 84
|
Verfasst: Mo 13.02.12 19:46
|
|
Martok
      
Beiträge: 3661
Erhaltene Danke: 604
Win 8.1, Win 10 x64
Pascal: Lazarus Snapshot, Delphi 7,2007; PHP, JS: WebStorm
|
Verfasst: Mo 13.02.12 20:41
bf109g.01 hat folgendes geschrieben : | 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
      
Beiträge: 84
|
Verfasst: Di 14.02.12 16:12
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:
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
      
Beiträge: 1581
Erhaltene Danke: 279
Delphi 10 Seattle Prof.
|
Verfasst: 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
      
Beiträge: 744
Erhaltene Danke: 54
Win XP Pro, Win 7 Pro x64
Delphi 7, Delphi XE, C++ Builder 5, SAP R/3
|
Verfasst: Di 14.02.12 16:48
_________________ Delphi: XE - OS: Windows 7 Professional x64
Für diesen Beitrag haben gedankt: baka0815, Tastaro
|
|
bf109g.01
      
Beiträge: 84
|
Verfasst: Di 14.02.12 20:36
Nersgatt hat folgendes geschrieben : | Versuch also mal die Funktion nur mit google.de aufzurufen. |
Probiert und geht nicht.
Was jetzt?
|
|
Narses
      

Beiträge: 10183
Erhaltene Danke: 1256
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: Di 14.02.12 22:46
Moin!
bf109g.01 hat folgendes geschrieben : | 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.
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...
cu
Narses
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|
Tastaro
      
Beiträge: 414
Erhaltene Danke: 23
|
Verfasst: Mi 15.02.12 08:36
|
|