|
Option Explicit
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 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 Any) As Long
Public Const HKEY_LOCAL_MACHINE = &H80000002
Private Const KEY_QUERY_VALUE = &H1
Private Const KEY_ENUMERATE_SUB_KEYS = &H8
Private Const KEY_NOTIFY = &H10
Private Const KEY_READ = KEY_QUERY_VALUE Or _
KEY_ENUMERATE_SUB_KEYS Or KEY_NOTIFY
Private Const ERROR_SUCCESS = 0&
Private Const REG_SZ = 1
Private Const REG_DWORD = 4
Public Function GetValue(ByVal root As Long, _
ByVal key As String, ByVal field As String, _
ByRef value As Variant) As Boolean
Dim lResult As Long, hKey As Long, dwType As Long
Dim zw As Long, nBufferSize As Long, strBuffer As String
lResult = RegOpenKeyEx(root, key, 0, KEY_READ, hKey)
GetValue = (lResult = ERROR_SUCCESS)
If lResult <> ERROR_SUCCESS Then Exit Function
lResult = RegQueryValueEx( _
hKey, field, 0&, dwType, ByVal 0&, nBufferSize)
GetValue = (lResult = ERROR_SUCCESS)
If lResult <> ERROR_SUCCESS Then Exit Function
Select Case dwType
Case REG_SZ
strBuffer = Space$(nBufferSize + 1)
lResult = RegQueryValueEx(hKey, field, 0&, dwType, _
ByVal strBuffer, nBufferSize)
GetValue = (lResult = ERROR_SUCCESS)
If lResult <> ERROR_SUCCESS Then Exit Function
value = strBuffer
Case REG_DWORD
nBufferSize = 4
lResult = RegQueryValueEx(hKey, field, 0&, dwType, _
zw, nBufferSize)
GetValue = (lResult = ERROR_SUCCESS)
If lResult <> ERROR_SUCCESS Then Exit Function
value = zw
Case Else
End Select
If lResult = ERROR_SUCCESS Then RegCloseKey hKey
GetValue = True
End Function
|
|