Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Internet Verbindungsdauer (https://www.delphipraxis.net/5127-internet-verbindungsdauer.html)

Master_BB 25. Mai 2003 12:28


Internet Verbindungsdauer
 
Hy,
ich wüßte gerne wie ich mir in echtzeit in meinem Programm meine Verbindungsdauer anzeigen lassen kann.
Da ich schon oft gelesen hab das es keinen richtigen Befehl dazu gibt könnte mir ja wenigstens einer sagen wie man herraus findet wann die Connection gestartet wurde damit man das dann mit der Uhrzeit in relation bringen kann. So müßte es eigentlich gehen, oder?

Pyr0cracker 25. Mai 2003 12:54

Hi
Tja, das habe ich auch schon probiert. Ich hab sogar 4 (vier!) Möglichkeiten gefunden wie man angeblich rauskriegt ob es eine Internetverbindung gibt.
Leider geht nix davon :x

Probiers mal indem du einen server wie google anpingen kannst, der Server dürfte so ziemlich immer Online sein...

Gruß

magicshadow 4. Jun 2003 23:01

Welches Betriebssystem nutzt du?
Unter Win2k/XP/2003/.NET kannst du dir mit 2 "einfachen" API Funktionen die Verbindungszeit aller RAS Verbindungen ausgeben lassen.

Wenn du noch interesse hast kann ich dir da gern helfen :)
Einziges Problem ist, das dieses program wirklcih alle RAS Connections auflistet, du bekommst also auch eventuelle LAN Verbindungen welche sich nicht so einfach von Internet Verbindungen unterscheiden lassen.

Captnemo 5. Jun 2003 00:01

@magicshadow

Wenns nur 2 sind, dann poste die doch mal. Könnte ja auch andere interessieren (incl. mir :mrgreen: ). Viele lesen die Beträge ohne jedes mal was dazu zu schreiben.

Daniel B 5. Jun 2003 00:09

Hallo und herzlich Willkommen im Forum!

Schau Dir doch mal den Internet-Monitor von Luckie an. Der könnte Dir weiterhelfen. ;)

Grüsse, Daniel :hi:

magicshadow 5. Jun 2003 00:21

Hier sind sie:

Als erstes die Deklarationen:
Code:
const
  RAS_MaxDeviceType = 16;
  RAS_MaxEntryName = 256;
  RAS_MaxDeviceName = 128;
type
{$IFNDEF UNICODE}
    TCHAR = type Char;
  {$ELSE}
    TCHAR = type WideChar;
  {$ENDIF}
  RAS_STATS = packed record
   dwSize               : DWORD;
   dwBytesXmited        : DWORD;
   dwBytesRcved         : DWORD;
   dwFramesXmited       : DWORD;
   dwFramesRcved        : DWORD;
   dwCrcErr             : DWORD;
   dwTimeoutErr         : DWORD;
   dwAlignmentErr       : DWORD;
   dwHardwareOverrunErr : DWORD;
   dwFramingErr         : DWORD;
   dwBufferOverrunErr   : DWORD;
   dwCompressionRatioIn : DWORD;
   dwCompressionRatioOut : DWORD;
   dwBps                : DWORD;
   dwConnectDuration    : DWORD;
  end;

 PRasConnA = ^PRasConn;
 PRasConnW = ^PRasConn;
 PRasConn = record
    dwSize      : DWORD;
    hrasconn    : DWORD;
    szEntryName : array [0..RAS_MaxEntryName] of Char;
    szDeviceType : array [0..RAS_MaxDeviceType] of Char;
    szDeviceName : array [0..RAS_MaxDeviceName] of Char;
 end;
dann die API's:
Code:
function RasEnumConnections(var lprasconn : PRasConn; var lpcb : DWORD; var lpcconnections : DWORD) : DWORD; stdcall; external 'RasApi32.dll' name 'RasEnumConnectionsA';
function RasGetConnectionStatistics(const hRasConn : DWORD;const lpStatistics : RAS_STATS) : DWORD; stdcall; external 'RasApi32.dll';
und Aufgerufen wierd das ganze dann so:
Code:
Procedure GetSystemParams;

var Res,lpcb,NumberOfEntries :DWORD;
    Entries                 :array[0..255] of PRasConn;
    mystats                 :RAS_STATS;
    i                       :DWORD;
begin
 Entries[0].dwsize:=412;
 lpcb:=256*Entries[0].dwsize;
 NumberOfEntries:=0;
 Res := RasEnumConnections(Entries[0], lpcb, NumberOfEntries);
 if res <> 0 then exit;
 mystats.dwsize:=sizeof(mystats);
 if NumberOfEntries=0 then exit;
 for i:=0 to NumberOfEntries-1 do begin
    Res:= RasGetConnectionStatistics(Entries[i].hrasconn,mystats);
    if Res=0 then begin
       showmessage(inttostr(mystats.dwConnectDuration)); //Die Verbindungszeit in ms
    end;
 end;
end;
Die Zeit kann man dann recht einfach in minuten, stunden, tage, usw umrechnen. (nach ca. 42,2 Tagen beginnt der counter wieder bei 0, so lange sollte aber kein Windows laufen *g*)

Uncle Cracker 5. Jun 2003 19:05

Kann man beim Trennen der Verbindung auch irgendwie die Gesamtzeit der Verbindung in eine Datei speichern und dann beim nächsten mal von dem gespeicherten Wert weiter zählen lassen? (mit magicshadow code)

magicshadow 5. Jun 2003 19:18

Also wenn du nur max. eine gleichzeitige RAS-Con hast solltes das kein problem sein. Nur wenn es mehrere sein können (LAN+Inet) dann wird das nicht so einfach zu unterscheiden welche welche ist, da die reienvolge der auflistung die des startens ist.

Aber im Prinzip:
Mit nem Timer jede Secunde gucken, ob die RAS Verbindung noch aktiv ist, wenn nicht einfach den letzten Zeit wert in ne Datei speichern.
Würd dir zum speichern dann aber raten in secunden zu runden, da sonst ein Überlauf droht (und irgendwann bei 0 angefangen wird).

PS: Kleiner Tip, hohl dir ne Flat, da ist die online zeit egal ;)

Master_BB 5. Jun 2003 20:40

naja online zeit egal mit na flat würde ich nicht sagen ich habe immer das probelm mit der 24stunden trennung und wenn ich abends weg will ist es mir oft zu lästig in Status der connection zu kukn wie land die schon läuft damit der rechner nicht plötzlich off is was ja fatal wäre.

- dann zu dem code irgentwie krieg ich das nicht hin das er mit in einem label die zeit anzeigt er sagt immer das es das label nicht gib wenn ich es in die prozedur mit einfüge.

magicshadow 5. Jun 2003 20:56

Jo, amch mal volgendes:

Code:
TForm1 = class(TForm)
 ...
 procedure RASConTime;
 ...
privare
 ...
public
 ...
end;

...

procedure TForm1.RASConTime;
var ...
begin
...
end;
Verstanden wie ich das mein, wenn ncih guck dir mal an, wie die Funktionen deklariert werden, die das System automatisch anlegt (z.B. Button1.OnClick usw.)
Dann kennt er in der Procedure auch die komponenten.

Oder du machst ne function und übergibst einfach den wert als rückgabe.

Aber mal ne Frage, wofür willst du das benutzen? Vieleicht gibet ja noch einen besseren Weg?


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:52 Uhr.
Seite 1 von 3  1 23      

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