Ich habe heute wieder meine Recherche aufgenommen um ein VPN automatisch zu verbinden, nachdem der Computer im Ruhezustand oder im Energiesparmodus war. (Inspiriert durch einen Blogeintrag von Bernd Hengelein.)

Wenn eine z.B. WLan-Verbindung abbricht (und damit auch das VPN getrennt wird) oder verbunden wird  tritt dieses Ereignis ein.
System.Net.NetworkInformation.NetworkChange.NetworkAvailabilityChanged 

Mit folgender Routine kann man dann die Connection wieder herstellen

 3     Sub startVPN(ByVal ConnectionName as String)   '
 4
         Process.Start("RasPhone.exe", "-d " & ConnectionName)
 5     End Sub

Eine sehr einfache Umsetzung einer Consolen-Anwendung (z.B. im Autostart) könnte dann folgendermaßen aussehen:
(Zumindest im Debugmodus hat dies problemlos funktioniert)

    1 Imports System.Net.NetworkInformation

    2 

    3 Module Module1

    4     Sub Main()

    5 

    6         AddHandler NetworkChange.NetworkAvailabilityChanged, _

    7                 AddressOf NetworkChange_NetworkAvailabilityChanged

    8 

    9         While True

   10             System.Threading.Thread.Sleep(1000)

   11         End While

   12 

   13     End Sub

   14 

   15     Sub NetworkChange_NetworkAvailabilityChanged _

   16                 (ByVal sender As Object, _

   17                  ByVal e As NetworkAvailabilityEventArgs)

   18 

   19         If e.IsAvailable Then

   20             Process.Start("RasPhone.exe", "-d myTestVPNConnectionName")

   21         End If

   22     End Sub

   23 

   24 End Module

kick it on dotnet-kicks.de

 


 

 Bei der Recherche bin ich auch über folgende Events gestolpert:

    1 Imports System.Net.NetworkInformation

    2 Imports Microsoft.Win32

    3 

    4 Module Module1

    5     Sub Main()

    6         start_SystemChange_Events()

    7 

    8         While True

    9             System.Threading.Thread.Sleep(10000)

   10         End While

   11 

   12     End Sub

   13 

   14 

   15 

   16     Public Sub start_SystemChange_Events()

   17 

   18         'Netzwerkconnection (z.B. WLan connected - disconnected)

   19         AddHandler NetworkChange.NetworkAvailabilityChanged, _

   20                 AddressOf NetworkChange_NetworkAvailabilityChanged

   21 

   22         'Energiesparen oder Ruhezustand

   23         AddHandler Microsoft.Win32.SystemEvents.PowerModeChanged, _

   24                 AddressOf SystemEvents_PowerModeChanged

   25 

   26         'Sperren des Session (WindowsTaste + L)

   27         AddHandler Microsoft.Win32.SystemEvents.SessionSwitch, _

   28                 AddressOf SystemEvents_SessionSwitch

   29 

   30         'Abmelden des Users

   31         AddHandler Microsoft.Win32.SystemEvents.SessionEnding, _

   32                 AddressOf SystemEvents_SessionEnding

   33 

   34     End Sub

   35 

   36     Sub NetworkChange_NetworkAvailabilityChanged _

   37                 (ByVal sender As Object, _

   38                  ByVal e As NetworkAvailabilityEventArgs)

   39 

   40         Console.WriteLine("NetworkAvailabilityChanged: " & _

   41                            e.IsAvailable & vbCrLf)

   42 

   43     End Sub

   44 

   45     Sub SystemEvents_PowerModeChanged(ByVal sender As Object, _

   46                                       ByVal e As PowerModeChangedEventArgs)

   47         Console.WriteLine("PowerModeChanged: " & _

   48                            e.Mode.ToString & vbCrLf)

   49     End Sub

   50 

   51 

   52     Sub SystemEvents_SessionSwitch(ByVal sender As Object, _

   53                                       ByVal e As SessionSwitchEventArgs)

   54         Console.WriteLine("SessionSwitch: " & _

   55                             e.Reason.ToString & vbCrLf)

   56     End Sub

   57 

   58     Sub SystemEvents_SessionEnding(ByVal sender As Object, _

   59                                       ByVal e As SessionEndingEventArgs)

   60         Console.WriteLine("SessionEnding: " & _

   61                             e.Reason.ToString)

   62     End Sub

   63 End Module