有人知道RegEnumKeyEx使用VB6在XP上工作而不是在Windows 7上工作的问题吗?
我有一个在XP上运行良好的程序,但只是在Windows7机器上安装了它,这部分代码不起作用。没有错误消息,只是无法检索数据。 其他注册表操作正常有人知道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
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函数的调用中是否可以解决问题。