Die Community zu .NET und Classic VB.
Menü

VB 5/6-Tipp 0055: Gesendete, empfangene Bytes und Geschwindigkeit einer DFÜ

 von 

Beschreibung 

Die statistischen Werte, wie übertragene und gesendete Bytes einer DFÜ-Verbindung, werden in einen extra dafür vorgesehen Schlüssel der Registry eingetragen. Ein leichtes diese auszulesen und für eigne Zwecke zu nutzen. Der Haken: Bei Windows NT funktioniert dies nicht, unter Win2k ist Tipp 383 zu verwenden. Das folgende Beispiel ermittelt neben den oben genannten Werten, auch die Geschwindigkeit der aktuellen Verbindung und die die momentane als auch die durchschnittliche Transferrate.

Schwierigkeitsgrad:

Schwierigkeitsgrad 2

Verwendete API-Aufrufe:

RegCloseKey, RegOpenKeyExA (RegOpenKeyEx), RegQueryValueExA (RegQueryValueEx)

Download:

Download des Beispielprojektes [2,61 KB]

'Dieser Quellcode stammt von http://www.activevb.de
'und kann frei verwendet werden. Für eventuelle Schäden
'wird nicht gehaftet.

'Um Fehler oder Fragen zu klären, nutzen Sie bitte unser Forum.
'Ansonsten viel Spaß und Erfolg mit diesem Source!

'------------- Anfang Projektdatei Project1.vbp -------------
'--------- Anfang Formular "Form1" alias Form1.frm  ---------
' Steuerelement: Timersteuerelement "Timer1"
' Steuerelement: Schaltfläche "Command1"
' Steuerelement: Beschriftungsfeld "Label6"
' Steuerelement: Beschriftungsfeld "Label5"
' Steuerelement: Beschriftungsfeld "Label3"
' Steuerelement: Beschriftungsfeld "Label4"
' Steuerelement: Beschriftungsfeld "Label2"
' Steuerelement: Beschriftungsfeld "Label1"

Option Explicit

Private Declare Function RegOpenKeyEx Lib "advapi32.dll" Alias _
        "RegOpenKeyExA" (ByVal hKey As Long, ByVal _
        lpSubKey As String, ByVal ulOptions As Long, ByVal _
        samDesired As Long, phkResult As Long) As Long
        
Private Declare Function RegCloseKey Lib "advapi32.dll" (ByVal _
        hKey As Long) As Long
        
Private Declare Function RegQueryValueEx Lib "advapi32.dll" Alias _
        "RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName _
        As String, ByVal lpReserved As Long, lpType As Long, _
        lpData As Any, lpcbData As Any) As Long
        
Const HKEY_DYN_DATA = &H80000006
Const KEY_READ = &H19
Const ERROR_SUCCESS = 0&

Dim s1&, e1&, LBytes&, CNT&, Q&, QQ&, SUM&

Private Sub Command1_Click()
  Reset
End Sub

Private Sub Form_Load()
  Reset
  LBytes = e1
  Timer1.Enabled = True
  Timer1.Interval = 100
End Sub

Private Sub Timer1_Timer()
  Dim EBytes&, SBytes&, CSpeed&
    EBytes = ReadBytes("Dial-Up Adapter\BytesRecvd")
    SBytes = ReadBytes("Dial-Up Adapter\BytesXmit")
    CSpeed = ReadBytes("Dial-Up Adapter\ConnectSpeed")
    
    If EBytes > -1 Then Label1.Caption = EBytes - e1
    If SBytes > -1 Then Label2.Caption = SBytes - s1
    
    If SBytes > -1 And EBytes <> e1 Then
      Label5.Caption = CSpeed
    End If
    If LBytes < EBytes Then
      Q = (EBytes - LBytes) / (Timer1.Interval / 1000)
      CNT = CNT + 1
    Else
      Q = 0
    End If
    SUM = SUM + Q
    QQ = SUM / CNT
    Label6.Caption = "[ " & QQ & " ] " & Q
    LBytes = EBytes
End Sub

Private Function ReadBytes(Entry$) As Long
Dim hKey&, L&, X&, DW&
  X = RegOpenKeyEx(HKEY_DYN_DATA, "PerfStats\StatData", 0, _
                   KEY_READ, hKey)
  If X <> ERROR_SUCCESS Then Exit Function
  X = RegQueryValueEx(hKey, Entry, 0&, DW, ByVal 0&, L)
  If X <> ERROR_SUCCESS Then Exit Function
  X = RegQueryValueEx(hKey, Entry, 0&, DW, ReadBytes, L)
  If X <> ERROR_SUCCESS Then Exit Function
  RegCloseKey hKey
End Function

Private Sub Reset()
  e1 = ReadBytes("Dial-Up Adapter\BytesRecvd")
  s1 = ReadBytes("Dial-Up Adapter\BytesXmit")
  SUM = 0
  CNT = 1
End Sub
'---------- Ende Formular "Form1" alias Form1.frm  ----------
'-------------- Ende Projektdatei Project1.vbp --------------

Tipp-Kompatibilität:

Windows/VB-VersionWin32sWin95Win98WinMEWinNT4Win2000WinXP
VB4
VB5
VB6

Hat dieser Tipp auf Ihrem Betriebsystem und mit Ihrer VB-Version funktioniert?

Ja, funktioniert!

Nein, funktioniert nicht bei mir!

VB-Version:

Windows-Version:

Ihre Meinung  

Falls Sie Fragen zu diesem Artikel haben oder Ihre Erfahrung mit anderen Nutzern austauschen möchten, dann teilen Sie uns diese bitte in einem der unten vorhandenen Themen oder über einen neuen Beitrag mit. Hierzu können sie einfach einen Beitrag in einem zum Thema passenden Forum anlegen, welcher automatisch mit dieser Seite verknüpft wird.

Archivierte Nutzerkommentare 

Klicken Sie diesen Text an, wenn Sie die 16 archivierten Kommentare ansehen möchten.
Diese stammen noch von der Zeit, als es noch keine direkte Forenunterstützung für Fragen und Kommentare zu einzelnen Artikeln gab.
Aus Gründen der Vollständigkeit können Sie sich die ausgeblendeten Kommentare zu diesem Artikel aber gerne weiterhin ansehen.

Kommentar von MGalpa am 16.08.2003 um 08:53

ma ein tipp


schaut euch doch mal Tipp 55

und kauft euch das Visual Basic Buch !

Kommentar von Only4U am 08.05.2003 um 19:04

Hi.
Hat leider nicht geklappt (Win XP mit DSL über Router)

Wie kann ich die Werte des (Anzeige vom) T-DSL Speedmanager auslesen?
Oder diese Werte aus der Registrie auslesen?

Somit kann ich durch ein einfaches Auslesen bei egal welchem Anschluß den Traffic auslesen.

Danke

Kommentar von chris am 07.02.2003 um 14:07

bitte! irgendwer wird doch ne lösung für nt/2k/xp parat haben! und welcher scherzkeks hat die haken bei vb4- nt/2k/xp gesetzt? so dummm

Kommentar von epibem am 28.10.2002 um 17:30

Bei mir bleiben alle felder auf 0

Kommentar von Jürgen am 12.10.2002 um 20:02

nur fragen und keine Antworten :(((
ich würde auch gern wiessen wie die werte des tips in XP auszulesen sind
hab etwas aus der NG ausgelesen aber leider kann ich da nix mit anfangen
weiss jemand weiter????
code :

Declare Function RasGetConnectionStatistics Lib "rasapi32.dll" (ByVal hRasConn As Long, ByRef lpStatistics As RAS_STATS) As Long

also ich kenne mich zu wenig mit API´s aus. Wen es jemand kann wäre ich dankbar über jede hilfe

Gruß Jürgen

Kommentar von Stefan Blum am 22.08.2002 um 10:51

Hallo zusammen,
gibt es eine solche Lösung auch für TCP IP Verbindungen zwecks Traffic überwachung.
Währe echt Super da wieder einmal auf meinem Server eingebrochen wurde.
Danke
Gruß an Alle
Stefan

Kommentar von Sven Müller am 16.08.2002 um 11:09

Ich möchte gerne die Daten die über ein Modem empfangen werden auswerten und sichtbar machen.Wie kann ich das Modem ansteuern um an die Daten zu kommen.Ich bedanke mich im voraus.

Kommentar von AriSoft am 23.04.2002 um 14:47

welcher Scherzkeks hat denn bei WinXp den Haken gesetzt ???
Den Registryzweig HKEY_DYN_DATA gibts doch gar nicht unter WinXP. Hat jamand ne Idee, wie man die Daten unter WinXP oder Win2k aus der Registry auslesen kann oder wo ich da suchen muß???
Bekomme leider keine Email an 55@cu.org weggeschickt (Siehe Notiz 4). Wahrscheinlich gibts die nicht mehr.
Danke im Vorraus

Kommentar von Stefan Blum am 21.04.2002 um 15:38

Gibt es sowas auch zum ermittel der Lan Aktivitäten?
Speed & Gesendete Bytes?
Oder kennt jemand die Registry Bezeichnungen an denen man diese Werte auslesen kann?
Gruß
Stefan Blum

Kommentar von Werner am 01.02.2002 um 13:58

zu VBtp0055:
die beschriebene Vorgangsweise mag ja für die überwiegende Mehrheit der PC-DFÜ-Benutzer ausreichend sein, weil (im Normalfall) nur 1 Dial-Up-Connection definiert / aktiv ist.
Wie schaut es aber bei denjenigen aus, die mehrere "Dial-Up-Adapter" definiert haben, zB. ...#2 (VPN) ?
Wie kommt man programmtechnisch von einem Device (typ/name) zum damit verbundenen Adapter, also zB. "modem"/"US-Robotics V90 Voice" - Dial-Up-Adapter... ?
Danke im Voraus.
Stichworte betreffend (RAS-) API und/oder Strukturen helfen schon weiter.
Werner.

Kommentar von Karl am 04.10.2001 um 19:36

Ja, haette auch interesse an WINNT. Wie waere das relisierbar ?

Kommentar von crazyV am 17.09.2001 um 18:42

Hi, ich hab cable und hab keine DFÜ Verbindung also wie kann ich trotzdem erfahren wie viele bytes mein PC in sich reingeladen hat... danke sehr schon im Voraus
thx crazyV

Kommentar von 555 am 25.06.2001 um 18:57

jetzt ist auch was für win2k da...

Kommentar von Pele am 23.04.2001 um 22:12

Gibt es keine Lösung für Win2k?

Kommentar von Sven Putzönius am 22.01.2001 um 20:20

das würde ich auch gerne wissen wollen.

Kommentar von Philip am 17.11.2000 um 00:14

Gibt es auch eine Möglichkeit für NT/2000?