Guten Abend,
habe mal ein kniffiges Anliegen zumal es um die Registry geht und ich mich mit dieser bis heute leider nicht beschäftigt habe.
Ich habe mir kürzlich eine Klasse aus dem Internet geladen wo Registry-Schlüssel und Werte anhand von Definitionen, die in einer .INI-Datei geschrieben sind, gelöscht werden. Jetzt wollte ich diese Klasse um eine Registry-Export Möglichkeit erweitern, leider erfolglos.
Ich poste mal die zwei Funktionen um die es nun geht
Die API erstmal vorweg
Private Declare Function RegOpenKeyEx Lib "advapi32.dll" Alias "RegOpenKeyExA" ( _
ByVal hKey As Long, ByVal lpSubKey As String, ByVal ulOptions As Long, ByVal _
samDesired As Long, ByRef phkResult As Long) As Long
Private Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As _
Long
Private Declare Function RegDeleteValue Lib "advapi32.dll" Alias _
"RegDeleteValueA" (ByVal hKey As Long, ByVal lpValueName As String) As Long
Private Declare Function RegDeleteKey Lib "advapi32.dll" Alias "RegDeleteKeyA" ( _
ByVal hKey As Long, ByVal lpSubKey As String) As Long
Private Declare Function SetEnvironmentVariable Lib "kernel32.dll" Alias _
"SetEnvironmentVariableA" (ByVal lpName As String, ByVal lpValue As String) As _
Long
Private Declare Function ExpandEnvironmentStrings Lib "kernel32.dll" Alias _
"ExpandEnvironmentStringsA" (ByVal lpSrc As String, ByVal lpDst As String, _
ByVal nSize As Long) As Long
Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" ( _
ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal _
lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As _
Long
Private Const ERROR_SUCCESS = 0
Private Const KEY_ALL_ACCESS = &H3F
Private Const KEY_SET_VALUE = &H2
Private Const REG_OPTION_NON_VOLATILE As Long = 0
Private Const KEY_READ As Long = &H20019
Private Enum RegDelOp
rKey = 1
rValue = 2
End Enum Private Function RegRemove(DelOp As RegDelOp, hKey As Long, _
Optional Parm1 As String = "", Optional Parm2 As String = "") As Boolean
On Error Resume Next
Dim iRet As Long
Dim hKeyRet As Long
Dim Shell
iRet = -1
'Open the key and see if it exsists
If RegOpenKeyEx(hKey, Parm1, 0, KEY_ALL_ACCESS, hKeyRet) <> ERROR_SUCCESS Then
Exit Function
End If
'Delete Value
If (DelOp = rValue) Then
iRet = RegDeleteValue(hKeyRet, Parm2)
End If
'Delete Key
If (DelOp = rKey) Then
' iRet = RegDeleteKey(hKey, Parm1)
iRet = RegDeleteKey(hKey, Parm1)
End If
'Check for Success
If (iRet = ERROR_SUCCESS) Then
Call RegCloseKey(hKeyRet)
RegRemove = True
End If
End Function Private Sub DoRegistry(ByVal Selection As String)
Dim iVals As New Collection
Dim Size As Integer
Dim Tmp() As String
Dim iRet As Boolean
Set iVals = GetIniSelection(Selection)
For Each RegOp In iVals
Tmp = Split(INIReadKey(Selection, RegOp), "|", , vbBinaryCompare)
Size = SafeUBound(Tmp)
Select Case Size
Case rKey
iRet = RegRemove(rKey, StrToKey(Tmp(0)), Tmp(1))
Case rValue
iRet = RegRemove(rValue, StrToKey(Tmp(0)), Tmp(1), Tmp(2))
' iRet =RegSaveKey oder eine ähnliche API würde ich gerne hier
' anbinden!?
End Select
Next RegOp
'Clear up
Set iVals = Nothing
RegOp = ""
iRet = False
Erase Tmp
Size = 0
End Sub Die zweite Sub ist in der Mitte auskommentiert. Da würde ich gerne fortsetzen. Geht das wie ich mir das vorstelle oder muss eine Neue Funktion her?
Ich würde mich über jede helfe freuen.
Vielen dank schonmal im Voraus |