先看以下代码Private Declare Function RegCreateKey Lib "advapi32.dll" Alias "RegCreateKeyA" _
    (ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long
Const HKEY_CURRENT_USER = &H80000001
Const HKEY_LOCAL_MACHINE = &H80000002
Private Sub Form_Load()
    Dim hKey As Long
    Dim strKey As String
    Dim hSubkey As Long
    hKey = &H80000007
    strKey = "TEST"
    
    '这句预期返回0 实测返回0
    Debug.Print RegCreateKey(HKEY_CURRENT_USER, _
                strKey, hSubkey),
    '这句预期返回0 实测返回87 求解
    Debug.Print RegCreateKey(HKEY_LOCAL_MACHINE, _
                strKey, hSubkey)
End Sub

解决方案 »

  1.   

    猜测与权限有关
    但手工用regedit.exe操作注册表一点问题没有
    求解
      

  2.   

    在HKEY_LOCAL_MACHINE这个根键下是不允许直接建立一级子键的,只能建立在其一级子键的下面,比如楼主把strKey = "TEST"换成strKey = "SoftWare\TEST"就可以了。就算在注册表编辑器中也是如此,至于楼主说手工用regedit.exe操作注册表一点问题没有好像不大正常。
    而HKEY_CURRENT_USER下面可以直接建立一级子键,所以不会出错。
      

  3.   

    的确是这样的,MS对HKEY_LOCAL_MACHINE和HKEY_USERS的第一级设置了保护的。