http://www.sqreg.com/file/vb/reg_07.htm
下面的一个子函数可以在WinNt下递归删除某个Key和它下面的所有SubKey.
Function DeleteSubkeyTree(ByVal hKey As Long, ByVal Subkey As String) As Boolean
Dim ret As Long, Index As Long, Name As String
Dim hSubKey As Long
ret = RegOpenKey(hKey, Subkey, hSubKey)
If ret <> 0 Then
DeleteSubkeyTree = False
Exit Function
End If
ret = RegDeleteKey(hSubKey, "")
If ret <> 0 Then
Name=String(256,chr(0))
If ret <> 0 Then
'RegDeleteKey无法删除,用于Winnt下。
Name = String(256, Chr(0))
While RegEnumKey(hSubkey, 0, Name, Len(Name)) = 0 And DeleteSubkeyTree(hSubkey, Name)
'递归删除Subkey的Subkey
Wend
ret = RegDeleteKey(hSubkey, "")
End If
DeleteSubkeyTree = (ret = 0)
RegCloseKey hSubkey
End Function
下面的一个子函数可以在WinNt下递归删除某个Key和它下面的所有SubKey.
Function DeleteSubkeyTree(ByVal hKey As Long, ByVal Subkey As String) As Boolean
Dim ret As Long, Index As Long, Name As String
Dim hSubKey As Long
ret = RegOpenKey(hKey, Subkey, hSubKey)
If ret <> 0 Then
DeleteSubkeyTree = False
Exit Function
End If
ret = RegDeleteKey(hSubKey, "")
If ret <> 0 Then
Name=String(256,chr(0))
If ret <> 0 Then
'RegDeleteKey无法删除,用于Winnt下。
Name = String(256, Chr(0))
While RegEnumKey(hSubkey, 0, Name, Len(Name)) = 0 And DeleteSubkeyTree(hSubkey, Name)
'递归删除Subkey的Subkey
Wend
ret = RegDeleteKey(hSubkey, "")
End If
DeleteSubkeyTree = (ret = 0)
RegCloseKey hSubkey
End Function
首先这段代码的ret = RegDeleteKey(hSubKey, "") 之后的
If ret <> 0 Then
Name=String(256,chr(0))
是多余的,应该删掉,另外好像枚举SubKey,不推荐使用RegEnumKey,推荐使用RegEnumKeyEx。用RegEnumKeyEx枚举SubKey用以下的代码,可我总是不能像RegEnumKey那样正常使用。能帮我改过来吗?函数参数:strKey,strSubKey,ByRef strEnumKeyArray() As String
lngResult = RegOpenKeyEx(strKey, _
strSubKey, _
0, _
KEY_ALL_ACCESS, _
lnghSubKey)If lngResult <>0 Then Exit FunctionDo While lngEnumRet = ERROR_SUCCESS
'建立枚举的值名的缓存
strKeyName = Space$(80)
lngKeyLen = Len(strKeyName)
'枚举key
lngEnumRet = RegEnumKeyEx(lnghSubKey, _
lngKeyCnt, _
strKeyName, _
lngKeyLen, _
ByVal 0&, _
vbNullString, _
ByVal 0&, _
udtFileTime)
If lngEnumRet <> ERROR_SUCCESS Then Exit Do
'更新输出的数组
ReDim Preserve strEnumKeyArray(lngKeyCnt) As String
'strKeyName为指定索引处项名的一个缓冲区
strEnumKeyArray(lngKeyCnt) = Left(strKeyName, InStr(1, strKeyName, vbNullChar) - 1)
'获取下一个子项,第一个子项的索引编号为零
lngKeyCnt = lngKeyCnt + 1
Loop