![]() |
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? |
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ß |
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. |
@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. |
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: |
Hier sind sie:
Als erstes die Deklarationen:
Code:
dann die API's:
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;
Code:
und Aufgerufen wierd das ganze dann so:
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';
Code:
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*)
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; |
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)
|
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 ;) |
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. |
Jo, amch mal volgendes:
Code:
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.)
TForm1 = class(TForm)
... procedure RASConTime; ... privare ... public ... end; ... procedure TForm1.RASConTime; var ... begin ... end; 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. |
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