Die Community zu .NET und Classic VB.
Menü

VB 5/6-Tipp 0009: DFÜ verbinden und trennen

 von 

Beschreibung 

Dieser Tipp bietet die Möglichkeit aus einer Anwendung heraus eine der vorhanden DFÜ-Verbindungen auszuführen und nach Bedarf wieder zu trennen. Dabei wird der normale Einwahl-Dialog genutzt und mit Sendkeys gestartet. Wer eine wirkliche automatische Einwahl benötigt sollte sich Tipp 49 anschauen!

Update nach einem Hinweis von De Mischi am 24. Februar 2004:
Nun wird die Verbindung auch aufgenommen, wenn im Namen ein Leerzeichen vorhanden ist.

Schwierigkeitsgrad:

Schwierigkeitsgrad 2

Verwendete API-Aufrufe:

RasEnumConnectionsA (RasEnumConnections), RasEnumEntriesA (RasEnumEntries), RasHangUpA (RasHangUp)

Download:

Download des Beispielprojektes [2,62 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: Schaltfläche "Command2"
' Steuerelement: Schaltfläche "Command1"
' Steuerelement: Listen-Steuerelement "List1"

Option Explicit

'Deklaration: Globale Form API-Konstanten
Private Const RAS_MaxDeviceType As Long = 16
Private Const RAS95_MaxDeviceName As Long = 128
Private Const RAS95_MaxEntryName As Long = 256

'Deklaration: Globale Form API-Typen
Private Type RASCONN95
    dwSize As Long
    hRasConn As Long
    szEntryName(RAS95_MaxEntryName) As Byte
    szDeviceType(RAS_MaxDeviceType) As Byte
    szDeviceName(RAS95_MaxDeviceName) As Byte
End Type

Private Type RASENTRYNAME95
    dwSize As Long
    szEntryName(RAS95_MaxEntryName) As Byte
End Type

'Deklaration: Globale Form API-Funktionen
Private Declare Function RasEnumConnections Lib "RasApi32.DLL" Alias "RasEnumConnectionsA" ( _
    lprasconn As Any, lpcb As Long, lpcConnections As Long) As Long

Private Declare Function RasEnumEntries Lib "RasApi32.DLL" Alias "RasEnumEntriesA" ( _
    ByVal reserved As String, ByVal lpszPhonebook As String, lprasentryname As Any, _
    lpcb As Long, lpcEntries As Long) As Long

Private Declare Function RasHangUp Lib "RasApi32.DLL" Alias "RasHangUpA" ( _
    ByVal hRasConn As Long) As Long

'Deklaration: Globale Form-Variablen
Dim lngRASCon As Long

Dim strDFUEName As String

Private Sub Command1_Click()
    'Programm beenden falls keine DFÜ-Verbindung gefunden wurde
    If List1.ListIndex = -1 Then
        Exit Sub
    End If

    'DFÜ-Verbindung starten
    strDFUEName = List1.List(List1.ListIndex)
    Shell "rundll32.exe " & Chr(34) & "rnaui.dll,RnaDial " & strDFUEName & Chr(34)

    SendKeys "{ENTER}", True
    SendKeys "{ENTER}", True

    Me.SetFocus
End Sub

Private Sub Command2_Click()
    Call HangUp(strDFUEName)
End Sub

Private Sub Form_Load()
    'Deklaration: Lokale Prozedur-Variablen
    Dim i As Long
    Dim lngBuffer As Long
    Dim lngEntries As Long

    Dim strRASConName As String

    Dim udtRASCon(255) As RASENTRYNAME95

    'Control-Eigenschaften initialisieren
    Command1.Caption = "Verbinden"
    Command2.Caption = "Trennen"

    udtRASCon(0).dwSize = 264
    lngBuffer = 256 * udtRASCon(0).dwSize

    'DFÜ-Verbindungen ermitteln
    Call RasEnumEntries(vbNullString, vbNullString, udtRASCon(0), lngBuffer, lngEntries)

    'DFÜ-Verbindungen in Liste anzeigen
    For i = 0 To lngEntries - 1
        strRASConName = StrConv(udtRASCon(i).szEntryName(), vbUnicode)
        List1.AddItem Left$(strRASConName, InStr(strRASConName, vbNullChar) - 1)
    Next i

    'Erste DFÜ-Verbindung in Liste markieren, falls eine vorhanden ist
    If List1.ListCount > 0 Then
        List1.ListIndex = 0
    End If
End Sub

Private Sub HangUp(ByVal strVerbindung As String)
    'Deklaration: Lokale Prozedur-Variablen
    Dim i As Long
    Dim lngBuffer As Long
    Dim lngEntries As Long
    Dim lngResult As Long

    Dim strRASConName As String

    ReDim udtRASCon(255) As RASCONN95

    'DFÜ-Verbindungen ermitteln
    udtRASCon(0).dwSize = 412
    lngBuffer = 256 * udtRASCon(0).dwSize
    lngResult = RasEnumConnections(udtRASCon(0), lngBuffer, lngEntries)

    For i = 0 To lngEntries - 1
        strRASConName = StrConv(udtRASCon(i).szEntryName(), vbUnicode)
        strRASConName = Left$(strRASConName, InStr(strRASConName, vbNullChar) - 1)

        'DFÜ-Verbindung beenden
        If strRASConName = strVerbindung Then
            lngRASCon = udtRASCon(i).hRasConn
            lngResult = RasHangUp(lngRASCon)
        End If
    Next i
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 9 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 am 31.05.2006 um 12:03

hm geht das verbinden nicht auch ohne sendkeys?
währe doch eleganter das über ne api zu machen...
hab bisher aber keine gefunden die unter winxp funzt.

Kommentar von Knud am 21.10.2004 um 10:06

Hallo.
Ich arbeite seit kurzer Zeit mit VB.net!
Kann mir jemand Helfen en Code in .NET umzuschreiben.
Ich bekomme das einfach niht hin!
Vielen Dank!
Knud

Kommentar von Blendman am 28.01.2004 um 14:11

Hallo zusammen.

Hab gelesen, daß einige von euch (die NT/2000 oder XP nutzen) diesen Tip nich benutzen konnten. Ist ja auch kein Wunder, da die rnaui.dll nur für 98/ME gedacht ist und auch nur da funktioniert. Doch kein Problem. Ersetzt einfach folgenden Eintrag:
Shell "rundll32.exe rnaui.dll,RnaDial " & strDFUEName
durch
Shell "rasphone -d " & strDFUEName

Beachtet aber das bereits eine DFÜ-Verbindung eingerichtet sein muß und der Name der DFÜ-Verbindung darf keine Freizeichen enthalten. (Sonderzeichen gehen. Hab ich schon getestet.)

Also dann viel Spass.
Gruß
Blendman

Kommentar von Hans-Jörg Stradtmann am 18.02.2003 um 13:47

Unter XP muss anstelle von rundll rasphone -t oder -f stehen

Kommentar von R.Buchen am 21.11.2002 um 10:12

arbeite mit VB6 unter NT4.0/SP 6
rnaui.dll Vers. 4.10.2222
erhalte nach Aufruf die Fehlermeldung

Fehler beim Laden von rnaui.dll
Die angegebene Prozedur wurde nicht gefunden.

Was kann das sein ?

Kommentar von suter am 14.08.2002 um 20:05

Wäre noch gut, wenn man diesen Tipp noch ausführlich erklären würde.

Kommentar von One-Way am 13.03.2002 um 12:30

Wenn ihr Win2k habt könnt ihr denn befehl "Shell "RASDIAL ""INTERNET (PPP) ISDN""",vbMinimizedNoFocus" benutzen mit /d könnt ihr verbindung trennen

Kommentar von Micheal Longerich am 28.06.2001 um 12:29

Wer kann mir helfen? Ich bekoome von der Funktion Internetdial den returnwert 668, was hat das zu bedeuten ??

Kommentar von Penticrack am 28.04.2001 um 11:14

bei mir gibt es schon Fehlermeldungen, wenn ich das Projekt lade ... da wird mir gesagt, das ein objekt nicht unterstützt wird, so 5 oder 6 mal ... tsts
wenn ixh es starte funktioniert es trotzdem nicht...