Mega Code Archive

 
Categories / VisualBasic Script / Windows API
 

Write a value from the Windows Registry

Private Declare Function RegOpenKeyA Lib "ADVAPI32.DLL" (ByVal hKey As Long, ByVal sSubKey As String, ByRef hkeyResult As Long) As Long Private Declare Function RegCloseKey Lib "ADVAPI32.DLL" (ByVal hKey As Long) As Long Private Declare Function RegSetValueExA Lib "ADVAPI32.DLL" (ByVal hKey As Long, ByVal sValueName As String, ByVal dwReserved As Long, ByVal dwType As Long, ByVal sValue As String, ByVal dwSize As Long) As Long Private Declare Function RegCreateKeyA Lib "ADVAPI32.DLL" (ByVal hKey As Long, ByVal sSubKey As String, ByRef hkeyResult As Long) As Long Private Declare Function RegQueryValueExA Lib "ADVAPI32.DLL" (ByVal hKey As Long, ByVal sValueName As String, ByVal dwReserved As Long, ByRef lValueType As Long, ByVal sValue As String, ByRef lResultLen As Long) As Long Function GetRegistry(Key, Path, ByVal ValueName As String)     Dim hKey As Long     Dim lValueType As Long     Dim sResult As String     Dim lResultLen As Long     Dim ResultLen As Long     Dim x, TheKey As Long     TheKey = -99     Select Case UCase(Key)         Case "HKEY_CLASSES_ROOT": TheKey = &H80000000         Case "HKEY_CURRENT_USER": TheKey = &H80000001         Case "HKEY_LOCAL_MACHINE": TheKey = &H80000002         Case "HKEY_USERS": TheKey = &H80000003         Case "HKEY_CURRENT_CONFIG": TheKey = &H80000004         Case "HKEY_DYN_DATA": TheKey = &H80000005     End Select          If TheKey = -99 Then         GetRegistry = "Not Found"         Exit Function     End If     If RegOpenKeyA(TheKey, Path, hKey) <> 0 Then _         x = RegCreateKeyA(TheKey, Path, hKey)          sResult = Space(100)     lResultLen = 100          x = RegQueryValueExA(hKey, ValueName, 0, lValueType, _     sResult, lResultLen)              Select Case x         Case 0: GetRegistry = Left(sResult, lResultLen - 1)         Case Else: GetRegistry = "Not Found"     End Select          RegCloseKey hKey End Function Private Function WriteRegistry(ByVal Key As String, _     ByVal Path As String, ByVal entry As String, _     ByVal value As String)          Dim hKey As Long     Dim lValueType As Long     Dim sResult As String     Dim lResultLen As Long         TheKey = -99     Select Case UCase(Key)         Case "HKEY_CLASSES_ROOT": TheKey = &H80000000         Case "HKEY_CURRENT_USER": TheKey = &H80000001         Case "HKEY_LOCAL_MACHINE": TheKey = &H80000002         Case "HKEY_USERS": TheKey = &H80000003         Case "HKEY_CURRENT_CONFIG": TheKey = &H80000004         Case "HKEY_DYN_DATA": TheKey = &H80000005     End Select          If TheKey = -99 Then         WriteRegistry = False         Exit Function     End If     If RegOpenKeyA(TheKey, Path, hKey) <> 0 Then         x = RegCreateKeyA(TheKey, Path, hKey)     End If     x = RegSetValueExA(hKey, entry, 0, 1, value, Len(value) + 1)     If x = 0 Then WriteRegistry = True Else WriteRegistry = False End Function Sub UpdateRegistryWithTime()     RootKey = "hkey_current_user"     Path = "software\microsoft\office\9.0\excel\LastStarted"     RegEntry = "DateTime"     RegVal = Now()     LastTime = GetRegistry(RootKey, Path, RegEntry)     Debug.Print LastTime          Call WriteRegistry(RootKey, Path, RegEntry, RegVal) End Sub