用RegQueryValueEx操作注册表遇到的一个怪问题,求高手指点!!!

stfger 2012-04-28 10:45:07


我先说一下问题在哪,我用RegQueryValueEx的时候,第二个参数里有变量,返回值就为2,常量就为0,这是生么原因?

参数还要分常量和变量吗?

用的是win7 的系统,求高手指点!!!!!


Option Explicit
Private Declare Function RegEnumKey Lib "advapi32.dll" Alias "RegEnumKeyA" (ByVal hKey As Long, ByVal dwIndex As Long, ByVal lpName As String, ByVal cbName As Long) As Long
Private Declare Function RegOpenKey Lib "advapi32.dll" Alias "RegOpenKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, ByRef phkResult As Long) As Long
Private Declare Function RegQueryValueEx Lib "advapi32.dll" Alias "RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, lpType As Long, lpData As Any, lpcbData As Long) As Long
Private Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long
Private Const HKEY_LOCAL_MACHINE = &H80000002
Private Const REG_SZ = 1

Dim SysName(99) As String '定义数组储存GUID
Dim i As Integer '数组元素
Dim Idx As Long
Dim hKey As Long, ret As Long
Dim lenData As Long, typeData As Long, s As String

Private Sub Command1_Click()
For i = 0 To Idx
'Debug.Print SysName(i)
ret = RegOpenKey(HKEY_LOCAL_MACHINE, "BCD00000000\Objects\" & SysName(i) & "\Elements\12000004", hKey)
'Debug.Print ret
If ret = 0 Then
ret = RegQueryValueEx(hKey, "Elements", 0, REG_SZ, ByVal vbNullString, lenData) '注意ByVal千万别忘了
Debug.Print ret
End If

Next
RegCloseKey hKey
End Sub

Private Sub Form_Load()
Dim name As String
Dim tempName As String

RegOpenKey HKEY_LOCAL_MACHINE, "BCD00000000\Objects\", hKey

Idx = 0

name = String(256, Chr(0))

Do
ret = RegEnumKey(hKey, Idx, name, Len(name))
If ret = 0 Then
tempName = Left(name, InStr(name, Chr(0)) - 1)
SysName(Idx) = tempName
Idx = Idx + 1
End If

Loop Until ret <> 0

End Sub




'Private Sub Command1_Click()
' ret = RegOpenKey(HKEY_LOCAL_MACHINE, "BCD00000000\Objects\{afeec1b6-6385-11e1-bacd-a5aa00bfb8e5}\Elements\12000004", hKey)
' 'Debug.Print ret
' If ret = 0 Then
' ret = RegQueryValueEx(hKey, "Element", 0, REG_SZ, ByVal vbNullString, lenData)
' 'Debug.Print ret
' If ret = 0 Then
' s = String(lenData, Chr(0))
' RegQueryValueEx hKey, "Element", 0, typeData, ByVal s, lenData '注意ByVal千万别忘了
' s = Left(s, InStr(s, Chr(0)) - 1)
' Debug.Print s
' End If
'
' End If
'End Sub


最下面的这个是我的验证代码,没有问题,但是上面的debug出来全是2,是怎么回事啊?再次球高手指点!!!
第一次发帖,没多少分,实在不好意思~~~~
...全文
91 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
bcrun 2012-04-30
  • 打赏
  • 举报
回复
不懂,如你的代码,不知道HKEY_LOCAL_MACHINE下有BCD00000000这样的键
ret = RegOpenKey(HKEY_LOCAL_MACHINE, "BCD00000000\Objects\" & SysName(i) & "\Elements\12000004", hKey)

stfger 2012-04-29
  • 打赏
  • 举报
回复
为什么都没人理我啊

1,486

社区成员

发帖
与我相关
我的任务
社区描述
VB API
社区管理员
  • API
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧