Visual Basic Forum

Visual Basic Forum
für VB6 und VB.NET Programmierer
 
RegistrierenRegistrieren  LoginLogin

Neues Thema eröffnen   Neue Antwort erstellen    Visual Basic Forum Foren-Übersicht -> [VB.NET] Tipps & Tricks
Autor
Nachricht
^^kev####
Überflieger
Überflieger

Anmeldedatum: 01.05.2008
Beiträge: 476
Wohnort: Haan

Bestimmte Registry Keys oder Values überwachen
Verfasst am: 29.06.2009, 13:22

Beschreibung:
Diese Klasse überwacht veränderungen in der Registry entweder an einem Key oder an einem Wert.
Wenn man einen Key überwacht wird das Event immer dann ausgelöst wenn irgendetwas an diesem Key geändert wird wie z.B. es wird unter diesem Key ein neuer Key angelegt oder es wird ein Wert geändert.
Wenn man einen Wert überwacht wird das Event immer nur dann ausgelöst wenn auch genau dieser Wert verändert wird.

Funktion:
Visual Basic: [code]Public Class RegistryWatcher
Public MonitorCollection As New Collections.Generic.Dictionary(Of String, Monitor)

Public Event RegistryChanged(ByVal M As Monitor)

Public Enum HKEY_ROOTS As Integer
HKEY_CLASSES_ROOT = 0
HKEY_CURRENT_USER = 1
HKEY_LOCAL_MACHINE = 2
HKEY_USERS = 3
HKEY_CURRENT_CONFIG = 4
End Enum

Public Sub AddWatcher(ByVal Root As HKEY_ROOTS, ByVal Path As String, ByVal ID As String, Optional ByVal Value As String = "")
If MonitorCollection.ContainsKey(ID) = False Then
Dim RegMon As New Monitor(Root, Path, ID, Value)
AddHandler RegMon.Changed, AddressOf OnRegistryChanged
MonitorCollection.Add(ID, RegMon)
End If
End Sub

Public Sub RemoveWatcher(ByVal ID As String)
If MonitorCollection.ContainsKey(ID) = True Then
MonitorCollection(ID).StopWatch()
MonitorCollection.Remove(ID)
End If
End Sub

Private Sub OnRegistryChanged(ByVal M As Monitor)
RaiseEvent RegistryChanged(M)
End Sub


Public Class Monitor
Private mRoot As HKEY_ROOTS
Private mPath As String
Private mID As String
Private mValue As String
Private mStop As Boolean

Public ReadOnly Property Root() As HKEY_ROOTS
Get
Return mRoot
End Get
End Property

Public ReadOnly Property Path() As String
Get
Return mPath
End Get
End Property

Public ReadOnly Property ID() As String
Get
Return mID
End Get
End Property

Public ReadOnly Property Value() As String
Get
Return mValue
End Get
End Property

Public Event Changed(ByVal M As Monitor)

Sub New(ByVal NewRoot As HKEY_ROOTS, ByVal NewPath As String, ByVal NewID As String, ByVal NewValue As String)
mRoot = NewRoot
mPath = NewPath
mID = NewID
mValue = NewValue

Dim T As New Threading.Thread(AddressOf Watcher)
T.Start()
End Sub

Public Sub StopWatch()
mStop = True
End Sub

Private Sub Watcher()
Dim WMIObject As Object
Dim WMIEvent As Object
Dim WMICurrEvent As Object

mPath = Replace(mPath, "", "\")

'Aktuellen Computer überwachen
WMIObject = GetObject("winmgmts:\.rootdefault")

If mValue = "" Then
'Kein Wert angegeben also nur den Key überwachen
WMIEvent = WMIObject.ExecNotificationQuery( _
"SELECT * FROM RegistryKeyChangeEvent WHERE Hive='" & _
mRoot.ToString & "' AND " & "KeyPath='" & mPath & "'")
Else
'Es wurde ein Wert angegeben also wird genau dieser Wert überwacht
WMIEvent = WMIObject.ExecNotificationQuery( _
"SELECT * FROM RegistryValueChangeEvent WHERE Hive='" & _
mRoot.ToString & "' AND " & "KeyPath='" & mPath & "' AND ValueName='" & mValue & "'")
End If

Do
Try
'Für 500ms auf eine änderung warten danach wirft das Event eine Exception und es wird erneut gewartet.
'Wenn innerhalb dieser 500ms alledings eine änderung auftretet dann wird das Event der Klasse ausgelöst
If mStop = True Then
mStop = False
Exit Sub
End If
WMICurrEvent = WMIEvent.NextEvent(500)
RaiseEvent Changed(Me)
Catch ex As Exception
End Try
Loop
End Sub
End Class
End Class[/code]

Quelle: dotnet-snippets.de
_________________
 
Neues Thema eröffnen   Neue Antwort erstellen    Visual Basic Forum Foren-Übersicht -> [VB.NET] Tipps & Tricks

Tags: visual basic, registry, überwachen

 
 Verwandte Themen   Aufrufe   Letzter Beitrag 
Keine neuen Beiträge Problem mit always on top funktion 1039 30.10.2009, 11:26
Keine neuen Beiträge IntStr()funktion 1177 11.10.2007, 08:49
Keine neuen Beiträge TopMost Funktion unter DirectX 921 27.07.2007, 10:48
Keine neuen Beiträge Wie Funktion nutzen ? 1102 29.06.2007, 20:59
Keine neuen Beiträge update funktion einbauen 1341 28.01.2007, 23:11
 



[ Time: 0.1457s ][ Queries: 83 (0.0363s) ][ GZIP on - Debug on ]