Start / FAQ / FAQ 0016: Wie kann ich Änderungen in der Registry vornehmen?
 
Startseite Up-/Download Tutorials Club Das Team
Rubriken Foren Bücher Tips 'n Tricks Suche


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


  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?

Inhalt

Neu, Ändern, Löschen
Schlüssel und Werte enumerieren
Änderungen bekannt machen
Änderungen überwachen
Pfade

  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


Erstellt: 30.04.2003
Aktualisierung: 26.07.2010
  Autor: Helge Rex
E-Mail: faq@ActiveVB.de



Copyright © 1998-2010 by ActiveVB
Alle Rechte vorbehalten.