Delphi-PRAXiS

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?

Master_BB 5. Jun 2003 21:00

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.

magicshadow 5. Jun 2003 21:06

10MB RAM? Is echt ein bissel viel!
hast du da riesen Bilder Eingeladen?

Bekommste das mit der Zeitausgabe hin?

Master_BB 5. Jun 2003 21:37

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

magicshadow 5. Jun 2003 21:48

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)

Master_BB 5. Jun 2003 23:04

ich hab delphi 7 prof. mit Jedi Componenten benutzt

Lefko 15. Dez 2003 20:17

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.

Lefko 16. Dez 2003 18:54

Re: Internet Verbindungsdauer
 
Weiss keiner, woran das liegt?
Hab ich die dlls nicht oder so? oder sind die bei windows dabei?

MfG Lefko.

Luckie 16. Dez 2003 18:56

Re: Internet Verbindungsdauer
 
Zitat:

Zitat von Lefko
Weiss keiner, woran das liegt?
Hab ich die dlls nicht oder so? oder sind die bei windows dabei?

Am schnellsten kannst dir die Frage beantworten, in dem du mit dem explorre mal danach suchst.

Eventuell musst du die DLL erst dynamisch laden.

Lefko 20. Dez 2003 16:07

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.

Luckie 20. Dez 2003 16:22

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.

Lefko 21. Dez 2003 14:59

Re: Internet Verbindungsdauer
 
Zitat:

Zitat von Luckie
Ich würde mal so sagen, dass besagte Funktion nicht in der DLL drin ist. Welches Betriebssystem?
...
Die zweite Meldung, die untere, ist wohl eine Folge der ersten.

Da hast du Recht, die funktion "RasGetConnectionStatistics" gibt es nicht in der dll.... was mach ich denn nu? ich hab WinME.

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