![]() |
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? |
ist für ein "kleines" PC monitor programm das sich immer so oben rechts in der ecke befindet und mir alle möglichen informationen die ich für wichtig erachte anzeigt wie HD größe und wieviel frei ist, derzeitige IP, wieviel ram gerade frei ist usw. einstellungen werden in eine INI file gespeichert läuft eigentlcih schon ganz gut bis auf das es 10MB ram benötigt die mir unerklärlich sind.
|
10MB RAM? Is echt ein bissel viel!
hast du da riesen Bilder Eingeladen? Bekommste das mit der Zeitausgabe hin? |
Liste der Anhänge anzeigen (Anzahl: 1)
jo zeitausgabe läuft jetzt,
hm bilder sind eigentlich nicht als zu groß kannst ja mal in den quellcode schaun |
Bringt nichts, ich hab diene Komponenten nicht.
ich seh 4 Labels, 2 Timer und ein Popup Menue auf ner Form. Weiß auch nciht, was das für komponenten sind. (Ich hab Delphi 5 Enterprise) |
ich hab delphi 7 prof. mit Jedi Componenten benutzt
|
Re: Internet Verbindungsdauer
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo Freunde :hi: ,
ich hab auch den oben geposteten QT genommen, um meine Verbindungszeit zu ermitteln, aber er funktioniert bei mir nicht, da Fehler auftreten (siehe Anhang!) Weiss jemand, woran das liegt?? MfG Lefko. |
Re: Internet Verbindungsdauer
Weiss keiner, woran das liegt?
Hab ich die dlls nicht oder so? oder sind die bei windows dabei? MfG Lefko. |
Re: Internet Verbindungsdauer
Zitat:
Eventuell musst du die DLL erst dynamisch laden. |
Re: Internet Verbindungsdauer
@Luckie:
Die DLL (RasApi32.dll) ist im Windows\System-Ordner dabei! aber weiss jemand nu, was diese Fehlermeldungen bedeuten? Ich weiss es nicht und weiss auch nciht, was ich jetzt verändern sollte... da ich die dll habe kann ich sie ja auch statisch laden und brauch das nicht dynamisch zu machen... weiss jemand weiter? MfG Lefko. |
Re: Internet Verbindungsdauer
Ich würde mal so sagen, dass besagte Funktion nicht in der DLL drin ist. Welches Betriebssystem? Bei mir Windows2000 ist sie drin. Kuck mal nach den exportierten Funktionen mit meinem Programm DLLExports rein, zu finden auf meiner HP.
Die zweite Meldung, die untere, ist wohl eine Folge der ersten. |
Re: Internet Verbindungsdauer
Zitat:
kann ich über eine andere funktion dieser dll die verbindungsdauer erhalten? Danke dir :) MfG Lefko. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:59 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