Attribute VB_Name = "Module1"
Option Explicit

Private Declare Function RegOpenKey Lib "advapi32.dll" Alias "RegOpenKeyA" _
(ByVal lngHkey As Long, ByVal lpSubKey As String, phkstrPathult As Long) As Long

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

' Types Enum Definitions.
Public Enum T_KeyClasses
    HKEY_CLASSES_ROOT = &H80000000
    HKEY_CURRENT_CONFIG = &H80000005
    HKEY_CURRENT_USER = &H80000001
    HKEY_LOCAL_MACHINE = &H80000002
    HKEY_USERS = &H80000003
End Enum

' Constant Registry Variable Definitions.
Private Const SYNCHRONIZE                   As Long = &H100000

Private Const KEY_QUERY_VALUE               As Long = &H1
Private Const KEY_SET_VALUE                 As Long = &H2
Private Const KEY_CREATE_LINK               As Long = &H20
Private Const KEY_CREATE_SUB_KEY            As Long = &H4
Private Const KEY_ENUMERATE_SUB_KEYS        As Long = &H8
Private Const KEY_EVENT                     As Long = &H1
Private Const KEY_NOTIFY                    As Long = &H10
'
Private Const READ_CONTROL                  As Long = &H20000
Private Const STANDARD_RIGHTS_READ          As Long = (READ_CONTROL)
Private Const STANDARD_RIGHTS_WRITE         As Long = (READ_CONTROL)
Private Const STANDARD_RIGHTS_ALL           As Long = &H1F0000
Private Const KEY_ALL_ACCESS                As Long = ((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))
Private Const KEY_READ                      As Long = ((STANDARD_RIGHTS_READ Or KEY_QUERY_VALUE Or KEY_ENUMERATE_SUB_KEYS Or KEY_NOTIFY) And (Not SYNCHRONIZE))
Private Const KEY_EXECUTE                   As Long = (KEY_READ)
Private Const KEY_WRITE                     As Long = ((STANDARD_RIGHTS_WRITE Or KEY_SET_VALUE Or KEY_CREATE_SUB_KEY) And (Not SYNCHRONIZE))

Private Const ERROR_SUCCESS             As Long = 0&



Public Function ReadRegistryKey(ByVal clsRegistryHive As T_KeyClasses, ByVal strPath As String) As Boolean

    Dim lngReturnVal As Long
    Dim lngKeyHandle As Long
    
    On Error GoTo ErrHandler

    lngReturnVal = RegOpenKey(clsRegistryHive, strPath, lngReturnVal)
    
    If (lngReturnVal = ERROR_SUCCESS) Then
        ReadRegistryKey = True
    Else
        ReadRegistryKey = False
    End If

    RegCloseKey lngReturnVal
    Exit Function
    
ErrHandler:
    ReadRegistryKey = False
End Function

