FAQ 0016: Wie kann ich Änderungen in der Registry vornehmen?
von Helge Rex
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
Ä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")
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.