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.

AchtungAchtung: 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.

Api-AufrufeVerwendete 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