|
|
|
Click here to copy the following block | Private Declare Function RegOpenKeyEx Lib "advapi32.dll" Alias "RegOpenKeyExA" _ (ByVal hKey As Long, ByVal lpSubKey As String, ByVal ulOptions As Long, _ ByVal samDesired As Long, phkResult As Long) As Long Private Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As _ Long Private Declare Function RegEnumValue Lib "advapi32.dll" Alias "RegEnumValueA" _ (ByVal hKey As Long, ByVal dwIndex As Long, ByVal lpValueName As String, _ lpcbValueName As Long, ByVal lpReserved As Long, lpType As Long, _ lpData As Any, lpcbData As Long) As Long Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (dest As _ Any, source As Any, ByVal numBytes As Long)
Const REG_SZ = 1 Const REG_EXPAND_SZ = 2 Const REG_BINARY = 3 Const REG_DWORD = 4 Const REG_MULTI_SZ = 7 Const ERROR_MORE_DATA = 234 Const KEY_READ = &H20019
Function EnumRegistryValues(ByVal hKey As Long, ByVal KeyName As String) As _ Collection Dim handle As Long Dim index As Long Dim valueType As Long Dim name As String Dim nameLen As Long Dim resLong As Long Dim resString As String Dim dataLen As Long Dim valueInfo(0 To 1) As Variant Dim retVal As Long Set EnumRegistryValues = New Collection If Len(KeyName) Then If RegOpenKeyEx(hKey, KeyName, 0, KEY_READ, handle) Then Exit Function hKey = handle End If Do nameLen = 260 name = Space$(nameLen) dataLen = 4096 ReDim resBinary(0 To dataLen - 1) As Byte retVal = RegEnumValue(hKey, index, name, nameLen, ByVal 0&, valueType, _ resBinary(0), dataLen) If retVal = ERROR_MORE_DATA Then ReDim resBinary(0 To dataLen - 1) As Byte retVal = RegEnumValue(hKey, index, name, nameLen, ByVal 0&, _ valueType, resBinary(0), dataLen) End If If retVal Then Exit Do valueInfo(0) = Left$(name, nameLen) Select Case valueType Case REG_DWORD CopyMemory resLong, resBinary(0), 4 valueInfo(1) = resLong Case REG_SZ, REG_EXPAND_SZ resString = Space$(dataLen - 1) CopyMemory ByVal resString, resBinary(0), dataLen - 1 valueInfo(1) = resString Case REG_BINARY If dataLen < UBound(resBinary) + 1 Then ReDim Preserve resBinary(0 To dataLen - 1) As Byte End If valueInfo(1) = resBinary() Case REG_MULTI_SZ resString = Space$(dataLen - 2) CopyMemory ByVal resString, resBinary(0), dataLen - 2 valueInfo(1) = resString Case Else End Select EnumRegistryValues.Add valueInfo, valueInfo(0) index = index + 1 Loop If handle Then RegCloseKey handle End Function |
|
|
|
Submitted By :
Nayan Patel
(Member Since : 5/26/2004 12:23:06 PM)
|
|
|
Job Description :
He is the moderator of this site and currently working as an independent consultant. He works with VB.net/ASP.net, SQL Server and other MS technologies. He is MCSD.net, MCDBA and MCSE. In his free time he likes to watch funny movies and doing oil painting. |
View all (893) submissions by this author
(Birth Date : 7/14/1981 ) |
|
|