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
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