Attribute VB_Name = "modRegistry"
Option Compare Database
Option Explicit


'********Code Start**************
'This code was originally written by Terry Kreft
' and Dev Ashish.
'It is not to be altered or distributed,
'except as part of an application.
'You are free to use it in any application,
'provided the copyright notice is left unchanged.
'
'Code Courtesy of
'Dev Ashish & Terry Kreft
'
Public Const HKEY_CLASSES_ROOT = &H80000000
Public Const HKEY_CURRENT_USER = &H80000001
Public Const HKEY_LOCAL_MACHINE = &H80000002
Public Const HKEY_USERS = &H80000003
Public Const HKEY_PERFORMANCE_DATA = &H80000004
Public Const HKEY_CURRENT_CONFIG = &H80000005
Public Const HKEY_DYN_DATA = &H80000006

Private Const STANDARD_RIGHTS_READ = &H20000
Private Const KEY_QUERY_VALUE = &H1&
Private Const KEY_ENUMERATE_SUB_KEYS = &H8&
Private Const KEY_NOTIFY = &H10&
Private Const SYNCHRONIZE = &H100000
Private Const KEY_READ = ((STANDARD_RIGHTS_READ Or _
                        KEY_QUERY_VALUE Or _
                        KEY_ENUMERATE_SUB_KEYS Or _
                        KEY_NOTIFY) And _
                        (Not SYNCHRONIZE))
Private Const MAXLEN = 256
Private Const ERROR_SUCCESS = &H0&

Const REG_NONE = 0
Const REG_SZ = 1
Const REG_EXPAND_SZ = 2
Const REG_BINARY = 3
Const REG_DWORD = 4
Const REG_DWORD_LITTLE_ENDIAN = 4
Const REG_DWORD_BIG_ENDIAN = 5
Const REG_LINK = 6
Const REG_MULTI_SZ = 7
Const REG_RESOURCE_LIST = 8


Type FILETIME
  dwLowDateTime As Long
  dwHighDateTime As Long
End Type

'Type FILETIME
'    dwLowDateTime As Long
'    dwHighDateTime As Long
'End Type

Private Declare PtrSafe Function apiRegOpenKeyEx Lib "advapi32.dll" Alias "RegOpenKeyExA" (ByVal hKey As LongPtr, _
                                                   ByVal lpSubKey As String, ByVal ulOptions As Long, _
                                                   ByVal samDesired As Long, ByRef phkResult As LongPtr) As Long

Private Declare PtrSafe Function apiRegCloseKey Lib "advapi32.dll" Alias "RegCloseKey" (ByVal hKey As LongPtr) As Long

Private Declare PtrSafe Function apiRegQueryValueEx Lib "advapi32.dll" Alias "RegQueryValueExA" (ByVal hKey As LongPtr, _
                                                      ByVal lpValueName As String, ByVal lpReserved As LongPtr, _
                                                      ByRef lpType As Long, lpData As Any, ByRef lpcbData As Long) As Long

Private Declare PtrSafe Function apiRegQueryInfoKey Lib "advapi32.dll" Alias "RegQueryInfoKeyA" (ByVal hKey As LongPtr, _
                                                      ByVal lpClass As String, ByRef lpcbClass As Long, _
                                                      ByVal lpReserved As LongPtr, ByRef lpcSubKeys As Long, _
                                                      ByRef lpcbMaxSubKeyLen As Long, ByRef lpcbMaxClassLen As Long, _
                                                      ByRef lpcValues As Long, ByRef lpcbMaxValueNameLen As Long, _
                                                      ByRef lpcbMaxValueLen As Long, ByRef lpcbSecurityDescriptor As Long, ByRef lpftLastWriteTime As FILETIME) As Long

Function fReturnRegKeyValue(ByVal lptKeyToGet As LongPtr, _
                            ByVal strKeyName As String, _
                            ByVal strValueName As String) _
                            As String
Dim lptHKey As LongPtr
Dim strClassName As String
Dim lngClassLen As Long
Dim lptReserved As LongPtr
Dim lngSubKeys As Long
Dim lngMaxSubKeyLen As Long
Dim lngMaxClassLen As Long
Dim lngValues As Long
Dim lngMaxValueNameLen As Long
Dim lngMaxValueLen As Long
Dim lngSecurity As Long
Dim udtFtLastWrite As FILETIME
Dim lngType As Long
Dim lngData As Long
Dim lngTmp As Long
Dim strRet As String
Dim udtVarRet As Variant
Dim lngRet As Long
    
    On Error GoTo fReturnRegKeyValue_Err
        
    'Open the key first
    lngTmp = apiRegOpenKeyEx(lptKeyToGet, _
                strKeyName, 0&, KEY_READ, lptHKey)

    'Are we ok?
    If Not (lngTmp = ERROR_SUCCESS) Then Err.Raise _
                                lngTmp + vbObjectError

    lptReserved = 0&
    strClassName = String$(MAXLEN, 0):  lngClassLen = MAXLEN

    'Get boundary values
    lngTmp = apiRegQueryInfoKey(lptHKey, strClassName, _
        lngClassLen, lptReserved, lngSubKeys, lngMaxSubKeyLen, _
        lngMaxClassLen, lngValues, lngMaxValueNameLen, _
        lngMaxValueLen, lngSecurity, udtFtLastWrite)

    'How we doin?
    If Not (lngTmp = ERROR_SUCCESS) Then Err.Raise _
                                lngTmp + vbObjectError
    
    'Now grab the value for the key
    strRet = String$(MAXLEN - 1, 0)
    lngTmp = apiRegQueryValueEx(lptHKey, strValueName, _
                lptReserved, lngType, ByVal strRet, lngData)
    Select Case lngType
      Case REG_SZ
        lngTmp = apiRegQueryValueEx(lptHKey, strValueName, _
                lptReserved, lngType, ByVal strRet, lngData)
        udtVarRet = Left(strRet, lngData - 1)
      Case REG_DWORD
        lngTmp = apiRegQueryValueEx(lptHKey, strValueName, _
                lptReserved, lngType, lngRet, lngData)
        udtVarRet = lngRet
      Case REG_BINARY
        lngTmp = apiRegQueryValueEx(lptHKey, strValueName, _
                lptReserved, lngType, ByVal strRet, lngData)
        udtVarRet = Left(strRet, lngData)
    End Select
    
    'All quiet on the western front?
    If Not (lngTmp = ERROR_SUCCESS) Then Err.Raise _
                                lngTmp + vbObjectError

fReturnRegKeyValue_Exit:
    fReturnRegKeyValue = udtVarRet
    lngTmp = apiRegCloseKey(lptHKey)
    Exit Function
fReturnRegKeyValue_Err:
    udtVarRet = "Error: Key or Value Not Found."
    Resume fReturnRegKeyValue_Exit
End Function

Public Function ShowReportRibbon()

Dim intRibbonState As Variant

intRibbonState = fReturnRegKeyValue(HKEY_CURRENT_USER, _
"Software\Microsoft\Office\12.0\Common\Toolbars\Access", _
"QuickAccessToolbarStyle")

If intRibbonState = 4 Then
' ribbon in auto hide state, show it...
SendKeys "^{F1}", False
DoEvents
End If

End Function

Public Function HideReportRibbon()

Dim intRibbonState As Variant

intRibbonState = fReturnRegKeyValue(HKEY_CURRENT_USER, _
"Software\Microsoft\Office\12.0\Common\Toolbars\Access", _
"QuickAccessToolbarStyle")

If intRibbonState = 0 Then
' ribbon is in full view....hide it...
SendKeys "^{F1}", False
DoEvents
End If

End Function


