Option Explicit
'Module level code.
'Registry APIs.
Public Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long
Public 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
Public 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
'Registry manipulation
Public Const REG_OPTION_NON_VOLATILE = 0
Public Const KEY_QUERY_VALUE = &H1
Public Const KEY_SET_VALUE = &H2
Public Const KEY_CREATE_SUB_KEY = &H4
Public Const KEY_ENUMERATE_SUB_KEYS = &H8
Public Const KEY_NOTIFY = &H10
Public Const KEY_CREATE_LINK = &H20
Public Const STANDARD_RIGHTS_READ = &H20000
Public Const STANDARD_RIGHTS_ALL = &H1F0000
Public Const SYNCHRONIZE = &H100000
Public Const KEY_ALL_ACCESS = ((STANDARD_RIGHTS_ALL Or KEY_QUERY_VALUE Or KEY_SET_VALUE Or _
KEY_CREATE_SUB_KEY Or KEY_ENUMERATE_SUB_KEYS Or KEY_NOTIFY Or KEY_CREATE_LINK) _
And (Not SYNCHRONIZE))
Public Const KEY_READ = ((STANDARD_RIGHTS_READ Or KEY_QUERY_VALUE Or KEY_ENUMERATE_SUB_KEYS Or KEY_NOTIFY) And (Not SYNCHRONIZE))
Public Function modReadDWORD(lngHKey As Long, strSubKey As String, _
strValueName As String) As Long
'Read the DWORD value.
Dim lngData As Long
Dim lngKeyHandle As Long
Dim lngDataType As Long
Dim lngDataSize As Long
'Open the key.
If RegOpenKeyEx(lngHKey, strSubKey, 0&, KEY_ALL_ACCESS, lngKeyHandle) <> _
ERROR_SUCCESS Then GoTo READ_DWORD_ERROR
'Get the key`s data length. It should ALWAYS return ERROR_MORE_DATA.
If RegQueryValueEx(lngKeyHandle, strValueName, 0&, lngDataType, 0&, lngDataSize) <> _
ERROR_MORE_DATA Then GoTo READ_DWORD_ERROR
'Test for DWORD value.
If lngDataType = REG_DWORD Then
'Get the key`s content.
If RegQueryValueEx(lngKeyHandle, strValueName, 0&, 0&, lngData, lngDataSize) <> _
ERROR_SUCCESS Then
GoTo READ_DWORD_ERROR
Else
'Return it...
modReadDWORD = lngData
End If
End If
'Close the key.
RegCloseKey lngKeyHandle
'Exit.
Exit Function
READ_DWORD_ERROR:
'Close the key.
Call RegCloseKey(lngKeyHandle)
'Time for any error handling.
MsgBox "Error in modReadDWORD"
End Function