Tipp 6.8 - Registry-Pfad löschen
Wie kann ich einen kompletten Registry-Pfad löschen?
Mit dieser Funktion kann man einen kompletten Registry-Pfad löschen. Das ging zwar schon immer, aber nur durch rekursives Löschen sämtlicher Einträge. Benutzt wird dabei die API-Funktion SHDeleteKey aus der shlwapi.dll, die seit dem Internet Explorer 4.0 verfügbar ist.
Achtung: Das ist ein sehr mächtiger Befehl, dessen Ergebnis nicht rückgängig gemacht werden kann (außer man hat die Registry-Datenbank zuvor gesichert). Also VORSICHT bei der Anwendung !!!
Kopieren Sie einfach nachfolgenden Quellcode in die Zwischenablage und fügen Sie anschließend den Inhalt der Zwischenablage in ein neues Modul ein. Die Aufrufparameter finden Sie im Quellcode beschrieben.
Verwendete Win32-Api-Aufrufe und Typen: FormatMessage, SHDeleteKey - REG_KEYS
Beispiel:
'Registry-Pfad löschen Enum REGKEYS 'VB6/VBA6 HKEY_CLASSES_ROOT = &H80000000 HKEY_CURRENT_USER = &H80000001 HKEY_LOCAL_MACHINE = &H80000002 HKEY_USERS = &H80000003 HKEY_PERFORMANCE_DATA = &H80000004 '(Windows NT only) HKEY_CURRENT_CONFIG = &H80000005 HKEY_DYN_DATA = &H80000006 '(Windows 95 only) End Enum 'Access 97/VBA5 'Const HKEY_CLASSES_ROOT As Long = &H80000000 'Const HKEY_CURRENT_USER As Long = &H80000001 'Const HKEY_LOCAL_MACHINE As Long = &H80000002 'Const HKEY_USERS As Long = &H80000003 'Const HKEY_PERFORMANCE_DATA As Long = &H80000004 'Const HKEY_CURRENT_CONFIG As Long = &H80000005 'Const HKEY_DYN_DATA As Long = &H80000006 Declare Function SHDeleteKey Lib "shlwapi.dll" Alias _ "SHDeleteKeyA" _ (ByVal hKey As Long, _ ByVal pszSubKey As String) As Long Declare Function FormatMessage Lib "kernel32" Alias _ "FormatMessageA" _ (ByVal dwFlags As Long, _ lpSource As Any, _ ByVal dwMessageId As Long, _ ByVal dwLanguageId As Long, _ ByVal lpBuffer As String, _ ByVal nSize As Long, _ Arguments As Long) As Long Public Function RegDelTree(ByVal lKey As REGKEYS, ByVal sSubkey As String) As String '// ====================================================================== '// Funktion: |Löschen eines kompletten Registry-Baums '// ---------------------------------------------------------------------- '// Vorauss.: |Die verwendete Funktion SHDeleteKey setzt Windows 98+ '// |und die Version 4.71 der Shlwapi.dll (IE4+) voraus. '// ---------------------------------------------------------------------- '// Parameter:|lKey = Schlüssel, in dem sich der Pfad befindet. '// |sSubkey = zu löschender Registry-Pfad '// ---------------------------------------------------------------------- '// Rückgabe: |String: leer = OK, gefüllt = Fehler mit Beschreibung '// ---------------------------------------------------------------------- '// Autor: | Stefan Kulpa '// | EDV Innovation & Consulting - Dormagen '// ====================================================================== '// !!! A C H T U N G - A C H T U N G - A C H T U N G - A C H T U N G !!! '// ====================================================================== '// Das ist ein sehr mächtiger Befehl, dessen Ergebnis nicht rückgängig '// gemacht werden kann (außer man die Registry-Datenbank zuvor gesichert). '// Also VORSICHT bei der Anwendung !!! '// ====================================================================== '// Beispiel: |HKEY_LOCAL_MACHINE\SOFTWARE\MyTest '// |+ HKEY_LOCAL_MACHINE\SOFTWARE\MyTest\MySubKey1\MySubKey2\MySubKey3 '// | - [MySubValue] '// | + HKEY_LOCAL_MACHINE\SOFTWARE\MyTest\MySubKey1\MySubKey2 '// | - [MySubValue] '// | + HKEY_LOCAL_MACHINE\SOFTWARE\MyTest\MySubKey1 '// | - [MySubValue] '// ---------------------------------------------------------------------- '// MsgBox RegDelTree(HKEY_LOCAL_MACHINE, "SOFTWARE\MyTest") '// ====================================================================== Dim sResult As String Dim lResult As Long sResult = vbNullString lResult = SHDeleteKey(lKey, sSubkey) If lResult <> 0 Then sResult = APIErrorMessage(lResult) End If End Function Public Function APIErrorMessage(lErrCode As Long) As String '// -------------------------------------------------------- '// Methode: | Beschreibung eines API-Fehlers ermitteln '// -------------------------------------------------------- '// Parameter: | lErrCode - API-Fehlercode '// -------------------------------------------------------- '// Rückgabe: | Beschreibender Text des Fehlers '// -------------------------------------------------------- '// Autor: | Stefan Kulpa '// | EDV Innovation & Consulting - Dormagen '// -------------------------------------------------------- '// http://www.kulpa-online.com/tipps-vb-diverses-10001.html '// -------------------------------------------------------- Const FORMAT_MESSAGE_FROM_SYSTEM = &H1000 Const FORMAT_MESSAGE_IGNORE_INSERTS = &H200 Const FORMAT_MESSAGE_MAX_WIDTH_MASK = &HFF Const LANG_USER_DEFAULT = &H400& Dim sBuffer As String Dim lResult As Long sBuffer = Space$(257) lResult = _ FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM Or _ FORMAT_MESSAGE_IGNORE_INSERTS Or _ FORMAT_MESSAGE_MAX_WIDTH_MASK, _ ByVal 0, lErrCode, LANG_USER_DEFAULT, _ ByVal sBuffer, 256, 0) If lResult Then APIErrorMessage = Left$(sBuffer, lResult) Else If lErrCode <> 0 Then APIErrorMessage = _ "Unbekannter Windows-Fehler: &H" & Hex$(lErrCode) End If End If End Function