Die Community zu .NET und Classic VB.
Menü

FAQ 0016: Wie kann ich Änderungen in der Registry vornehmen?

 von 

Frage 

Wie kann ich Änderungen in der Registry vornehmen?

Wie kann ich allen Anwendung mitteilen, daß etwas in der Registry geändert wurde?

Wie kann ich die Schlüssel und Werte in der Registry enumerieren?

Neu, Ändern, Löschen  

Bei ActiveVB gibt es dafür mehrere Lösungsansätze.
Zum Einen gibt es den Registry lesen und schreiben, Schlüssel anlegen und löschen [Tipp 0107].
Zum Anderen findet man in der Klassenrubrik eine Registry-Klasse.

 Neu Um den Schlüssel mit dem Namen (Standard) auszulesen oder zu beschreiben, muß vbNullString als Schlüsselname übergeben werden.

Schlüssel und Werte enumerieren  

Mit In der Registry browsen [Tipp 0209] können Schlüssel und Werte enumeriert werden, unter Windows XP funktioniert dieser Tipp jedoch nicht.
Deshalb gibt es dieses Beispiel, welches eine Klasse benutzt und Ereignisse verwendet.

Desweiteren wird auch hier auf die Registry-Klasse in unserer Klassenrubrik verwiesen.

Änderungen bekannt machen  

 Neu Um Veränderungen in der Registry allen Anwendungen mitzuteilen, kann man folgenden Code verwenden:

Private Const SHCNE_ASSOCCHANGED As Long = &H8000000
Private Const SHCNF_IDLIST       As Long = &H0&
Private Const WM_SETTINGCHANGE   As Long = &H1A&
Private Const HWND_BROADCAST     As Long = &HFFFF&

Private Declare Sub SHChangeNotify Lib "shell32" ( _
                ByVal wEventId As Long, _
                ByVal uFlags As Long, _
                ByVal dwItem1 As Long, _
                ByVal dwItem2 As Long)
                
Private Declare Function PostMessage Lib "user32" _
                Alias "PostMessageA" ( _
                ByVal hWnd As Long, _
                ByVal wMsg As Long, _
                ByVal wParam As Long, _
                ByVal lParam As Long) As Long
                
Private Declare Sub Sleep Lib "kernel32" ( _
                ByVal dwMilliseconds As Long)

Private Sub Ändern()
    Call SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST, 0, 0)

    Call PostMessage(HWND_BROADCAST, WM_SETTINGCHANGE, 0, 0)
End Sub

Listing 1: Änderungen bekanntmachen

Änderungen überwachen  

Mit der Funktion RegNotifyChangeKeyValue des Windows-API kann die Registry auf Änderungen überwacht werden.
Da es auf ActiveVB bisher kein Quelltext dazu gibt, sei hier auf RegMon von sysinternals.com verwiesen.

Pfade  

Anmerkungen von Ingmar Runge:
Einige Versionen von Windows tun sich schwer damit, komplette Pfade (z.B. HKCU\Software\MeineSoftware\EinSchluessel) mit einem Aufruf anzulegen.
Es ist daher besser, jedes Element des gesamten Pfades einzeln anzulegen, also:

'   ACHTUNG! Pseudocode!
SchluesselAnlegen(HKCU, "Software", "MeineSoftware")
SchluesselAnlegen(HKCU, "Software\MeineSoftware", "EinSchluessel")

Listing 2: Mehrere Ebenen anlegen

64 Bit  

VB6-Anwendungen sind 32-Bit-Anwendungen. Hirf hat einige Links zusammengetragen, in denen beschrieben wird, wie VB6-Anwendungen auf 64-Bit-Schlüssel zugreifen können:
Registry-Werte im 64-Bit-Windows.

Ihre Meinung  

Falls Sie Fragen zu dieser FAQ haben, Ihre Erfahrung mit anderen Nutzern austauschen möchten oder auf eine Ergänzung hinweisen 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.