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

解决方案 »

  1.   

    谢谢回答!这段代码我看过,是《用VB操作注册表(七)》吧?
    首先这段代码的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