Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

DFÜ-Netzwerk Datenverkehr Volumen ermitteln, wie?

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
oldirty



Anmeldungsdatum: 04.08.2005
Beiträge: 65

BeitragVerfasst am: 24.11.2005, 01:40    Titel: DFÜ-Netzwerk Datenverkehr Volumen ermitteln, wie? Antworten mit Zitat

Hallo,

kann mir jemand einen Tipp (oder Beispielcode) geben, wie ich mit Hilfe von FreeBasic und Api's das Up- und Download-Volumen ermitteln kann.
So wie beim Netzwerkmonitor unten in der Taskleiste:
Verbindung
Geschwindigkeit
Gesendet xxx Bytes
Empfangen xxx Bytes

Schon mal Danke im Voraus.

OlDirty
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Sebastian
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 5969
Wohnort: Deutschland

BeitragVerfasst am: 24.11.2005, 14:26    Titel: Antworten mit Zitat

Hallo,

so geht's in VB: http://www.activevb.de/tipps/vb6tipps/tipp0055.html
Nach dem Mittagessen versuch ich mal, den Code in FB zum Laufen zu kriegen. zwinkern

Viele Grüße!
Sebastian
_________________

Die gefährlichsten Familienclans | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Sebastian
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 5969
Wohnort: Deutschland

BeitragVerfasst am: 24.11.2005, 17:14    Titel: Antworten mit Zitat

Bewusster Doppelpost! Probiert den folgenden Code mal bei euch aus und schreibt dann, unter welcher Windowsversion er funktioniert hat oder nicht... lächeln

Übrigens: Für die, die den Code nicht compilieren wollen, gibt es hier ein Komplettpaket mit fertiger EXE-Datei: Link, 12KB zwinkern

Code:
'
'  Beispiel-Source zum Ermitteln der DFÜ-Statistiken unter allen
'  Windows-Versionen für FreeBASIC!
'
'  Das benötigte Verfahren variiert zwischen Windows 9x Systemen
'  und NT-basierten Systemen. Daher wird am Anfang die Windowsversion
'  Quick'n'Dirty ermittelt. Schöner ist das Ermitteln der Version mit
'  der WinAPI, aber dadurch würde der Source nur noch komplizierter
'  werden. Der Source wurde bereits unter Windows 2000 getestet und
'  funktioniert dort prima. Die Methoden basieren auf 2 Artikeln von
www.ActiveVb.de.
'
'  Viel Spaß mit dem Code!
'  Sebastian Steiner, 24.11.2005
sebastian_steiner@gmx.de, www.sebastian-steiner.de
'



option explicit


SHELL "VER.EXE>"+CURDIR$+"\~vertemp.tmp"
DIM zeit#, t$, Interval%
DIM inhalt AS STRING
DIM SHARED WinVer AS STRING*2
OPEN CURDIR$+"\~vertemp.tmp" FOR BINARY AS #1
inhalt=SPACE$(LOF(1))
GET #1,,inhalt
CLOSE #1
KILL CURDIR$+"\~vertemp.tmp"
IF INSTR(UCASE$(inhalt), "NT") OR INSTR(UCASE$(inhalt), "2000") _
OR INSTR(UCASE$(inhalt), "XP") THEN
    WinVer="NT"
ELSE
    WinVer="9X"
END IF



'Windows 95/98/ME Deklarationen
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
Declare Function RegCloseKey Lib "advapi32.dll" (ByVal _
hKey As Long) As Long
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
DECLARE Sub VReset()
DECLARE Function ReadBytes(Entry AS STRING) As Long
Const HKEY_DYN_DATA = &H80000006
Const KEY_READ = &H19
Const ERROR_SUCCESS = 0&
DIM SHARED s1 AS LONG, e1 AS LONG, LBytes AS LONG, CNT as long
DIM SHARED Q AS LONG, QQ AS LONG, SUM AS LONG, EBytes AS LONG
DIM SHARED SBytes AS LONG, CSpeed AS LONG




'Windows NT/2000/XP Deklarationen
DECLARE FUNCTION LenB(ausdruck as any) AS LONG
Dim library As Integer
library = DyLibLoad("rasapi32.dll")
if(library = 0) Then
 COLOR 12: Print "Fehler: rasapi32.dll nicht gefunden."
 Sleep: End 1
end If
type RASSTATS2000
dwSize As Long
dwBytesXmited As Long
dwBytesRcved As Long
dwFramesXmited As Long
dwFramesRcved As Long
dwCrcErr As Long
dwTimeoutErr As Long
dwAlignmentErr As Long
dwHardwareOverrunErr As Long
dwFramingErr As Long
dwBufferOverrunErr As Long
dwCompressionRatioIn As Long
dwCompressionRatioOut As Long
dwBps As Long
dwConnectDuration As Long
End Type
Const RAS_MaxEntryName As Long = 256&
Const RAS_MaxDeviceType As Long = 16&
Const RAS_MaxDeviceName As Long = 32&
Type RASType
dwSize As Long
hRasCon As Long
szEntryName(RAS_MaxEntryName) As Byte
szDeviceType(RAS_MaxDeviceType) As Byte
szDeviceName(RAS_MaxDeviceName) As Byte
End Type
Type RASStatusType
dwSize As Long
RasConnState As Long
dwError As Long
szDeviceType(RAS_MaxDeviceType) As Byte
szDeviceName(RAS_MaxDeviceName) As Byte
szInBytes As Double
syOutbytes As Double
End Type
Dim RasGetConnectionStatistics as Function (ByVal hRasConn As Long, _
lpStatistics as RASSTATS2000) As Long
Dim RasGetLinkStatistics As Function (ByVal hRasConn As Long, ByVal _
dwSubEntry As Long, lpStatistics As RASSTATS2000) As Long
Dim RasEnumConnections AS FUNCTION (lpRasCon As Any, lpcb As Long, _
lpcConnections As Long) As Long
Dim RasGetConnectStatus AS FUNCTION (ByVal hRasCon As Long, _
lpStatus As Any) As Long
RasGetConnectionStatistics = DyLibSymbol(library, "RasGetConnectionStatistics")
RasGetLinkStatistics = DyLibSymbol(library, "RasGetLinkStatistics")
RasEnumConnections = DyLibSymbol(library, "RasEnumConnectionsA")
RasGetConnectStatus = DyLibSymbol(library, "RasGetConnectStatusA")
Dim RAS(255) As RASType, RASStatus As RASStatusType
Dim lg As Long, lpcon As Long, Result As Long
Dim myStats As RASSTATS2000
Dim rtn As Long




'#### Jetzt das eigentliche Programm
Interval%=100

PRINT ""
COLOR 11
PRINT "  DF"+CHR$(154)+"-Verbindung"
COLOR 7
PRINT ""

IF WinVer="NT" THEN
    DO
    zeit#=TIMER
    DO
        SLEEP 5
        t$=INKEY$
        IF t$<>"" THEN
            DyLibFree library
            end
        end if
    LOOP UNTIL CDBL(TIMER-zeit#)>CDBL(Interval%/1000)
    RAS(0).dwSize = 412
    lg = 256 * RAS(0).dwSize
    Result = RasEnumConnections(RAS(0), lg, lpcon)
    myStats.dwSize = LenB(myStats)
    rtn = RasGetConnectionStatistics(RAS(0).hRasCon, myStats)
    If lpcon = 0 Then
        CLS
        PRINT ""
        COLOR 11
        PRINT "  DF"+CHR$(154)+"-Verbindung"
        COLOR 7
        PRINT ""
        PRINT "  OFFLINE"
    Else
        RASStatus.dwSize = 160
        Result = RasGetConnectStatus(RAS(0).hRasCon, RASStatus)
        If RASStatus.RasConnState = &H2000 Then
            CLS
            PRINT ""
            COLOR 11
            PRINT "  DF"+CHR$(154)+"-Verbindung"
            COLOR 7
            PRINT ""
            PRINT "  ONLINE!"
            PRINT ""
            PRINT "  Bytes empfangen: "; LTRIM$(STR$(myStats.dwBytesRcved))
            PRINT "  Bytes gesendet:  "; LTRIM$(STR$(myStats.dwBytesXmited))
            PRINT "  Geschwindigkeit: "; LTRIM$(STR$(FIX(myStats.dwBps/1000))); " kbps"
        Else
            CLS
            PRINT ""
            COLOR 11
            PRINT "  DF"+CHR$(154)+"-Verbindung"
            COLOR 7
            PRINT ""
            PRINT "  Verbindung wird gerade getrennt oder aufgebaut."
        End If
    End If
    LOOP
    DyLibFree library
    end
End if


If WinVer="9X" THEN
VReset
LBytes=e1
DO
    zeit#=TIMER
    DO
        SLEEP 5
        t$=INKEY$
        IF t$<>"" THEN end
    LOOP UNTIL CDBL(TIMER-zeit#)>CDBL(Interval%/1000)
    EBytes = ReadBytes("Dial-Up Adapter\BytesRecvd")
    SBytes = ReadBytes("Dial-Up Adapter\BytesXmit")
    CSpeed = ReadBytes("Dial-Up Adapter\ConnectSpeed")
    CLS
    PRINT ""
    COLOR 11
    PRINT "  DF"+CHR$(154)+"-Verbindung"
    COLOR 7
    PRINT ""
    PRINT "  Bytes empfangen: "; LTRIM$(STR$(EBytes-e1))
    PRINT "  Bytes gesendet:  "; LTRIM$(STR$(SBytes-s1))
    PRINT "  Geschwindigkeit: "; LTRIM$(STR$(CSpeed))
    If LBytes < EBytes Then
      Q = (EBytes - LBytes) / (Interval% / 1000)
      CNT = CNT + 1
    Else
      Q = 0
    End If
    SUM = SUM + Q
    QQ = SUM / CNT
    PRINT "  [ " + LTRIM$(STR$(QQ))+ " ] " + LTRIM$(STR$(Q))
    LBytes = EBytes
LOOP
END
END IF


Function ReadBytes(Entry AS STRING) As Long
Dim hKey AS LONG, L AS LONG, X AS LONG, DW AS LONG, longval as long
  X = RegOpenKeyEx(HKEY_DYN_DATA, "PerfStats\StatData", 0, _
                   KEY_READ, hKey)
  If X <> ERROR_SUCCESS Then Exit Function
  X = RegQueryValueEx(hKey, Entry, 0, DW, 0, L)
  If X <> ERROR_SUCCESS Then Exit Function
  X = RegQueryValueEx(hKey, Entry, 0, DW, longval, L)
  ReadBytes=longval
  If X <> ERROR_SUCCESS Then Exit Function
  RegCloseKey hKey
End Function

Sub VReset()
  e1 = ReadBytes("Dial-Up Adapter\BytesRecvd")
  s1 = ReadBytes("Dial-Up Adapter\BytesXmit")
  SUM = 0
  CNT = 1
End Sub

FUNCTION LenB(ausdruck as RASSTATS2000) AS LONG
    dim temp as long
    temp=LEN(ausdruck)
    LenB=temp
end function

_________________

Die gefährlichsten Familienclans | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
oldirty



Anmeldungsdatum: 04.08.2005
Beiträge: 65

BeitragVerfasst am: 24.11.2005, 17:33    Titel: Antworten mit Zitat

Hallo,

habe bei mir den Code
Code:

Declare Function RegCloseKey Lib "advapi32.dll" (ByVal _
hKey As Long) As Long


in

Code:

Declare Function RegCloseKey Lib "advapi32.dll" Alias "RegCloseKey" (ByVal _
hKey As Long) As Long


umändern müssen unter Windows XP Pro mit Freebasic 0.15 vom 12.11.2005.

Habe mittlerweile in Anlehnung an deinen Code "DFÜ-Verb. beenden" aus der fb_dfue.zip ein Programm wie folgt entwickelt, dass ohne die Shell auskommt. (Noch keine Schleife drin, aber erste Anzeigen laufen schon:

Code:

'
' Beispiel zum Anzeigen und Trennen aller DFÜ-Verbindungen für FreeBasic
' von Volta (wadepohl@t-online.de) und Sebastian Steiner (sebastian_steiner@gmx.de)
'
' Funktioniert natürlich nur, wenn das DFÜ-Netzwerk überhaupt installiert ist.
'
Screen 16
'Deklarationen
Dim library As Integer
Dim RasEnumConnections as Function (lpRasCon As Any, lpcb As Long,_
                                    lpcConnections As Long) As Long
Dim RasHangUp As Function (ByVal hRasConn As Long) As Long
Dim RasGetConnectionStatistics As Function (ByVal hRasConn As Long, _
                                    ByVal lpStatistics As Long) As Long


'DLL laden
library = DyLibLoad("rasapi32.dll")
'Fehlerbehandlung
if(library = 0) Then
 COLOR 12
 Print "Fehler: rasapi32.dll nicht gefunden."
 Sleep
 End 1
end If
'Inhalt von derdll deklarieren
RasEnumConnections = DyLibSymbol(library, "RasEnumConnectionsA")
RasHangUp = DyLibSymbol(library, "RasHangUpA")
RasGetConnectionStatistics = DyLibSymbol(library, "RasGetConnectionStatistics")


Declare Function GetStr(Feld() As Byte) As String
 
Type RASType
  dwSize As Long
  hRasCon As Long
  szEntryName(0 To 256) As Byte
  szDeviceType(0 To 16) As Byte
  szDeviceName(0 To 128) As Byte
  pad As Byte
End Type

Type RAS_STATS
    dwSize As Long
    dwBytesXmited As Long
    dwBytesRcved As Long
    dwFramesXmited As Long
    dwFramesRcved As Long
    dwCrcErr As Long
    dwTimeoutErr As Long
    dwAlignmentErr As Long
    dwHardwareOverrunErr As Long
    dwFramingErr As Long
    dwBufferOverrunErr As Long
    dwCompressionRatioIn As Long
    dwCompressionRatioOut As Long
    dwBps As Long
    dwConnectDuration As Long
End Type

  Dim conn As RASType
  Dim stat As RAS_STATS
  Dim yy As Long, z As Long
  conn.dwSize = Len(conn)
  stat.dwSize = Len(stat)

'Main

Dim x%, y%, RAS(255) As RASType
Dim lg&, lpcon&, Result&

       
    RAS(0).dwSize = 412
    lg = 256 * RAS(0).dwSize
    Result = RasEnumConnections(RAS(0), lg, lpcon)

    If lpcon <> 0 Then
      PRINT ""
      COLOR 10
      PRINT " Aktive Verbindungen: "
      PRINT ""
      For x = 0 To lpcon - 1
        COLOR 13
        PRINT " => "; GetStr(RAS(x).szEntryName())
        COLOR 7
        PRINT ""
        PRINT "    ID:        "; LTRIM$(STR$(RAS(x).hRasCon))
        result2= RasGetConnectionStatistics(RAS(x).hRasCon, varptr(stat))
        PRINT "    Eintrag:   "; GetStr(RAS(x).szEntryName())
        PRINT "    Ger"+chr$(132)+"t:     "; GetStr(RAS(x).szDeviceName())
        PRINT "    Ger"+chr$(132)+"tetyp: "; GetStr(RAS(x).szDeviceType())
       ' Print stat.dwAlignmentErr
        Print "    kbs:       ";stat.dwBps
        'Print stat.dwBufferOverrunErr
        print "    Gesendet:  ";stat.dwBytesXmited
        Print "    Empfangen: ";stat.dwBytesRcved
        'Print stat.dwCompressionRatioIn
        'Print stat.dwCompressionRatioOut
        Print "Verb.Dauer in Sek.:";stat.dwConnectDuration/1000
        'Print stat.dwCrcErr
        'Print stat.dwFramesRcved
        'Print stat.dwFramesXmited
        'Print stat.dwFramingErr
        'Print stat.dwTimeoutErr
        PRINT ""
      Next x
    Else
      PRINT ""
      COLOR 14
      PRINT " Keine DF";CHR$(154)+"-Verbindungen aktiv!"
      PRINT ""
    End If
 
  Dim hRasConn&
    FOR x%=LBOUND(RAS) TO UBOUND(RAS)
      hRasConn = RAS(x%).hRasCon
'      Result = RasHangUp(ByVal hRasConn) 'Trennen der Verbindung
    NEXT x%   


  COLOR 11
  PRINT " Fertig."
 
'gibt den Speicherbereich frei.
DyLibFree library

SLEEP: END

Function GetStr(Feld() As Byte) As String
  Dim x%, y%, aa$, bb$
    For x% = 0 To UBound(Feld)
      bb$ = Chr$(Feld(x%))
      If bb$ <> Chr$(0) Then
        aa$ = aa$ + bb$
      Else
        Exit For
      End If
    Next x%
    GetStr = aa$
End Function



Kann ja mal ausprobiert werden.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Sebastian
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 5969
Wohnort: Deutschland

BeitragVerfasst am: 24.11.2005, 17:54    Titel: Antworten mit Zitat

Hm, du verwendest in dem Code ja auch die Methode, die ich oben auch für NT-basierte Systeme nehme. Ich bin mir daher nicht sicher, ob ein Statistiktool auf dieser Basis auf Windows 95/98 läuft. neutral Wäre toll, wenn ein Windows 98 Benutzer den Code mal probieren könnte.
_________________

Die gefährlichsten Familienclans | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC. Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz