当前位置:编程学习 > VB >>

列出注册表中某一项下的所有子项的代码,请大家改改错误?

tmp = RegEnumValue(key, idx, ByVal vbNullString, lenname, ByVal 0, typedata, tmparr(0), lendata)执行到这条代码,tmp的值不为0,为什么regenumvalue函数没调用成功,这个函数怎么用呀?麻烦各位再看看其它错误。
代码如下:
Option Explicit
Enum rootkey
HKEY_CLASSES_ROOT = &H80000000
HKEY_CURRENT_USER = &H80000001
HKEY_LOCAL_MACHINE = &H80000002
HKEY_USERS = &H80000003
HKEY_CURRENT_CONFIG = &H80000004
End Enum
Enum valuetype
reg_none_ = 0
reg_sz = 1
reg_expand_sz = 2
reg_binary = 3
reg_dword = 4
reg_dword_big_endian = 5
reg_link = 6
reg_multi_sz = 7
End Enum
Declare Function RegEnumValue Lib "advapi32.dll" Alias "RegEnumValueA" (ByVal hKey As Long, ByVal dwIndex As Long, ByVal lpValueName As String, lpcbValueName As Long, lpReserved As Long, lpType As Long, lpData As Byte, lpcbData As Long) As Long
Declare Function RegOpenKey Lib "advapi32.dll" Alias "RegOpenKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long
Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long
Declare Function ExpandEnvironmentStrings Lib "kernel32" Alias "ExpandEnvironmentStringsA" (ByVal lpSrc As String, ByVal lpDst As String, ByVal nSize As Long) As Long
Sub MultiStringToStringArray(s As String, s1() As String)
Dim count As Integer, pos As Integer, pos1 As Integer, index As Integer
pos = InStr(s, Chr(0))
While pos > 0
count = count + 1
pos = InStr(pos + 1, s, Chr(0))
Wend
count = count - 1
ReDim s1(0 To count - 1)
For index = 0 To count - 1
pos = pos1 + 1
pos1 = InStr(pos, s, Chr(0))
s1(index) = Mid(s, pos, pos1 - pos)
Next
End Sub
Private Sub Command1_Click()
Dim name As String
Dim lenname As Long
Dim typedata As Long
Dim key As Long
Dim idx As Long
Dim lendata As Long
Dim tmp As Long
Dim data As String
Dim datab As Byte
Dim d As String
Dim sarr() As String
Dim barr() As Byte
Dim tmparr(256) As Byte
Dim j As Integer
tmp = RegOpenKey(HKEY_LOCAL_MACHINE, "Software\Microsoft\Windows\CurrentVersion\Run", key)
If tmp <> 0 Then
Exit Sub
End If
idx = 5
While tmp = 0
tmp = RegEnumValue(key, idx, ByVal vbNullString, lenname, ByVal 0, typedata, tmparr(0), lendata)
Print tmp
If tmp <> 0 Then
RegCloseKey key
Exit Sub
End If
name = String(lenname, Chr(0))
Select Case typedata
Case reg_sz, reg_expand_sz, reg_multi_sz
ReDim barr(0 To lendata - 1) As Byte
tmp = RegEnumValue(key, idx, name, lenname, ByVal 0, typedata, barr(0), lendata)
data = StrConv(barr, vbUnicode)
If typedata = reg_sz Then
data = Left(data, Len(data) - 1)
Text1.SelText = name & "=" & data & vbCrLf
ElseIf typedata = reg_expand_sz Then
d = String(Len(data) + 256, Chr(0))
ExpandEnvironmentStrings data, d, Len(d)
d = Left(d, Len(d) - 1)
Text1.SelText = name & "=" & d & vbCrLf
ElseIf typedata = reg_multi_sz Then
Call MultiStringToStringArray(data, sarr)
For j = 0 To UBound(sarr)
Text1.SelText = name & "(" & j & ")" & "=" & sarr(j) & vbCrLf
Next
End If
Case reg_dword, reg_dword_big_endian
RegEnumValue key, idx, name, lenname, ByVal 0, typedata, datab, lendata
Text1.SelText = name & "=" & datab & vbCrLf
Case reg_binary
ReDim barr(0 To lendata - 1) As Byte
RegEnumValue key, idx, name, lenname, ByVal 0, typedata, barr(0), lendata
Text1.SelText = name & "="
For j = 0 To UBound(barr)
Text1.SelText = Hex(barr(j)) & " "
Next
Text1.SelText = vbCrLf
End Select
idx = idx + 1
Wend
RegCloseKey key
End Sub
补充:VB ,  API
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,