SetRegistryValue – Write a value in the Registry

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 LongPrivate Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As _    LongPrivate Declare Function RegSetValueEx Lib "advapi32.dll" Alias _    "RegSetValueExA" (ByVal hKey As Long, ByVal lpValueName As String, _    ByVal Reserved As Long, ByVal dwType As Long, lpData As Any, _    ByVal cbData As Long) As LongConst KEY_WRITE = &H20006  '((STANDARD_RIGHTS_WRITE Or KEY_SET_VALUE Or                            ' KEY_CREATE_SUB_KEY) And (Not SYNCHRONIZE))Const REG_SZ = 1Const REG_BINARY = 3Const REG_DWORD = 4' Write or Create a Registry value' returns True if successful'' Use KeyName = "" for the default value'' Value can be an integer value (REG_DWORD), a string (REG_SZ)' or an array of binary (REG_BINARY). Raises an error otherwise.Function SetRegistryValue(ByVal hKey As Long, ByVal KeyName As String, _    ByVal ValueName As String, value As Variant) As Boolean    Dim handle As Long    Dim lngValue As Long    Dim strValue As String    Dim binValue() As Byte    Dim length As Long    Dim retVal As Long        ' Open the key, exit if not found    If RegOpenKeyEx(hKey, KeyName, 0, KEY_WRITE, handle) Then        Exit Function    End If    ' three cases, according to the data type in Value        Select Case VarType(value)        Case vbInteger, vbLong            lngValue = value            retVal = RegSetValueEx(handle, ValueName, 0, REG_DWORD, lngValue, 4)        Case vbString            strValue = value            retVal = RegSetValueEx(handle, ValueName, 0, REG_SZ, ByVal strValue, _                Len(strValue))        Case vbArray + vbByte            binValue = value            length = UBound(binValue) - LBound(binValue) + 1            retVal = RegSetValueEx(handle, ValueName, 0, REG_BINARY, _                binValue(LBound(binValue)), length)        Case Else            RegCloseKey handle            Err.Raise 1001, , "Unsupported value type"    End Select        ' Close the key and signal success    RegCloseKey handle    ' signal success if the value was written correctly    SetRegistryValue = (retVal = 0)End Function

Share the Post:
Share on facebook
Share on twitter
Share on linkedin

Overview

Recent Articles: