有人知道RegEnumKeyEx使用VB6在XP上工作而不是在Windows 7上工作的问题吗?

有人知道RegEnumKeyEx使用VB6在XP上工作而不是在Windows 7上工作的问题吗?,vb6,registry,Vb6,Registry,我有一个在XP上运行良好的程序,但只是在Windows7机器上安装了它,这部分代码不起作用。没有错误消息,只是无法检索数据。 其他注册表操作正常 Dim n As Long Dim keyname As String Dim keyvalue As String Dim hkey As Long Dim hkey1 As Long Dim regopentype As Long Dim lretval As Long Dim lkeyvalsize As Long Dim lpattr As L

我有一个在XP上运行良好的程序,但只是在Windows7机器上安装了它,这部分代码不起作用。没有错误消息,只是无法检索数据。 其他注册表操作正常

Dim n As Long
Dim keyname As String
Dim keyvalue As String
Dim hkey As Long
Dim hkey1 As Long
Dim regopentype As Long
Dim lretval As Long
Dim lkeyvalsize As Long
Dim lpattr As Long
Dim str100 As String * 100
Dim subkeyname As String
Dim lkeyvalue As Long
Dim i As Integer
Dim XS As String
Dim v As Variant

    nominals = 0
    keyname = "MX3\NOMINAL"
    lretval = RegCreateKeyEx(HKEY_LOCAL_MACHINE, keyname, 0, REG_SZ, _ 
              REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, lpattr, hkey, regopentype)
    If lretval <> 0 Then
       MsgBox "Error RegCreateKeyEx"
       Exit Sub
    End If

    If regopentype = 1 Then
       MsgBox "regopentype = 1"
       RegCloseKey (hkey)
       GoTo End_Nominals
    End If

Read_Nominal:
    lkeyvalsize = 100
    subkeyname = str100
    lretval = RegEnumKeyEx(hkey, n, subkeyname, lkeyvalsize, 0, vbNullString, 0, 0)
    If lretval = ERROR_NO_MORE_ITEMS Then
       GoTo End_Nominals
    End If

    If lretval <> 0 Then
       MsgBox "Error in RegEnumKeyEx"
       GoTo End_Nominals
    End If
    i = InStr(subkeyname, vbNullChar)
    subkeyname = Left$(subkeyname, i - 1)

    ' now get the value at this key
    keyname = "MX3\NOMINAL\" & subkeyname
    lretval = RegCreateKeyEx(HKEY_LOCAL_MACHINE, keyname, 0, REG_SZ, REG_OPTION_NON_VOLATILE, _
                             KEY_ALL_ACCESS, lpattr, hkey1, regopentype)
    If lretval <> 0 Or regopentype <> 2 Then
       MsgBox "Error reading value " & keyname
       GoTo End_Nominals
    End If
    keyvalue = str100
    lkeyvalsize = 100
    lretval = RegQueryValueExString(hkey1, keyname, 0, REG_SZ, keyvalue, lkeyvalsize)
    If lretval <> 0 Then
       MsgBox "Error in RegQueryValue"
       GoTo End_Nominals
    End If

    i = InStr(keyvalue, vbNullChar)
    keyvalue = Left$(keyvalue, i - 1)
    nominals = nominals + 1
    NominalArray(nominals, 1) = subkeyname
    NominalArray(nominals, 2) = keyvalue

    n = n + 1
    GoTo Read_Nominal

End_Nominals:

    RegCloseKey (hkey)
    RegCloseKey (hkey1)

谢谢。

我的第一个想法是权限问题;Windows 7中的UAC需要提升权限才能从HKEY_LOCAL_计算机读取。尝试在Windows 7计算机上以管理员身份运行,查看是否获得预期结果


另一个想法是,这可能是一个32位对64位的问题。例如,在32位操作系统上,您可以从HKEY\U LOCAL\U MACHINE\SOFTWARE\读取数据,但在64位操作系统上,您必须从HKEY\U LOCAL\U MACHINE\SOFTWARE\Wow6432Node\读取数据。

查看这篇MSDN文章,看看将KEY\U WOW64\U 64KEY标志添加到对RegCreateKeyEx函数的调用中是否可以解决问题。