How to Save/Load data from Registry
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 | 'Registry - How to Save/Load data from Registry Option Explicit Public Type SECURITY_ATTRIBUTES nLength As Long lpSecurityDescriptor As Long bInheritHandle As Long End Type 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 Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long Declare Function RegQueryValueEx Lib "advapi32" Alias "RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, ByRef lpType As Long, ByVal lpData As String, ByRef lpcbData As Long) As Long Declare Function RegSetValueEx Lib "advapi32.dll" Alias "RegSetValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal Reserved As Long, ByVal dwType As Long, ByVal lpData As String, ByVal cbData As Long) As Long Declare Function RegDeleteValue Lib "advapi32.dll" Alias "RegDeleteValueA" (ByVal hKey As Long, ByVal lpValueName As String) As Long Declare Function RegCreateKeyEx Lib "advapi32.dll" Alias "RegCreateKeyExA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal Reserved As Long, ByVal lpClass As String, ByVal dwOptions As Long, ByVal samDesired As Long, lpSecurityAttributes As SECURITY_ATTRIBUTES, phkResult As Long, lpdwDisposition As Long) As Long Declare Function RegDeleteKey Lib "advapi32.dll" Alias "RegDeleteKeyA" (ByVal hKey As Long, ByVal lpSubKey As String) As Long 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 Private Const SYNCHRONIZE = &H100000 Private Const STANDARD_RIGHTS_ALL = &H1F0000 Private Const KEY_QUERY_VALUE = &H1 Private Const KEY_SET_VALUE = &H2 Private Const KEY_CREATE_LINK = &H20 Private Const KEY_CREATE_SUB_KEY = &H4 Private Const KEY_ENUMERATE_SUB_KEYS = &H8 Private Const KEY_EVENT = &H1 Private Const KEY_NOTIFY = &H10 Private Const READ_CONTROL = &H20000 Private Const STANDARD_RIGHTS_READ = (READ_CONTROL) Private Const STANDARD_RIGHTS_WRITE = (READ_CONTROL) Private 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)) Private Const KEY_READ = ((STANDARD_RIGHTS_READ Or KEY_QUERY_VALUE Or KEY_ENUMERATE_SUB_KEYS Or KEY_NOTIFY) And (Not SYNCHRONIZE)) Private Const KEY_EXECUTE = (KEY_READ) Private Const KEY_WRITE = ((STANDARD_RIGHTS_WRITE Or KEY_SET_VALUE Or KEY_CREATE_SUB_KEY) And (Not SYNCHRONIZE)) Private Const REG_BINARY = 3 Private Const REG_CREATED_NEW_KEY = &H1 Private Const REG_DWORD = 4 Private Const REG_DWORD_BIG_ENDIAN = 5 Private Const REG_DWORD_LITTLE_ENDIAN = 4 Private Const REG_EXPAND_SZ = 2 Private Const REG_FULL_RESOURCE_DESCRIPTOR = 9 Private Const REG_LINK = 6 Private Const REG_MULTI_SZ = 7 Private Const REG_NONE = 0 Private Const REG_SZ = 1 Private Const REG_NOTIFY_CHANGE_ATTRIBUTES = &H2 Private Const REG_NOTIFY_CHANGE_LAST_SET = &H4 Private Const REG_NOTIFY_CHANGE_NAME = &H1 Private Const REG_NOTIFY_CHANGE_SECURITY = &H8 Private Const REG_OPTION_BACKUP_RESTORE = 4 Private Const REG_OPTION_CREATE_LINK = 2 Private Const REG_OPTION_NON_VOLATILE = 0 Private Const REG_OPTION_RESERVED = 0 Private Const REG_OPTION_VOLATILE = 1 Private Const REG_LEGAL_CHANGE_FILTER = (REG_NOTIFY_CHANGE_NAME Or REG_NOTIFY_CHANGE_ATTRIBUTES Or REG_NOTIFY_CHANGE_LAST_SET Or REG_NOTIFY_CHANGE_SECURITY) Private Const REG_LEGAL_OPTION = (REG_OPTION_RESERVED Or REG_OPTION_NON_VOLATILE Or REG_OPTION_VOLATILE Or REG_OPTION_CREATE_LINK Or REG_OPTION_BACKUP_RESTORE) Public Sub DeleteRegistryKey(rClass As T_KeyClasses, Path As String) Dim res As Long res = RegDeleteKey(rClass, Path) End Sub Public Sub DeleteValue(rClass As T_KeyClasses, Path As String, sKey As String) Dim hKey As Long Dim res As Long res = RegOpenKeyEx(rClass, Path, 0, KEY_ALL_ACCESS, hKey) res = RegDeleteValue(hKey, sKey) RegCloseKey hKey End Sub Public Sub CreateRegistryKey(rClass As T_KeyClasses, Path As String) Dim hKey As Long Dim res As Long Dim y As SECURITY_ATTRIBUTES Dim Operation As Long res = RegCreateKeyEx(rClass, Path, 0, "", 0, KEY_ALL_ACCESS, y, hKey, Operation) RegCloseKey hKey End Sub Public Function GetRegValue(KeyRoot As T_KeyClasses, Path As String, sKey As String) As String Dim hKey As Long Dim KeyValType As Long Dim KeyValSize As Long Dim KeyVal As String Dim tmpVal As String Dim res As Long Dim i As Integer res = RegOpenKeyEx(KeyRoot, Path, 0, KEY_ALL_ACCESS, hKey) If res <> 0 Then GoTo Errore tmpVal = String(1024, 0) KeyValSize = 1024 res = RegQueryValueEx(hKey, sKey, 0, KeyValType, tmpVal, KeyValSize) If res <> 0 Then GoTo Errore If (Asc(Mid(tmpVal, KeyValSize, 1)) = 0) Then tmpVal = Left(tmpVal, KeyValSize - 1) Else tmpVal = Left(tmpVal, KeyValSize) End If Select Case KeyValType Case REG_SZ KeyVal = tmpVal Case REG_DWORD For i = Len(tmpVal) To 1 Step -1 KeyVal = KeyVal + Hex(Asc(Mid(tmpVal, i, 1))) Next KeyVal = Format("&h" + KeyVal) End Select GetRegValue = KeyVal RegCloseKey hKey Exit Function Errore: GetRegValue = "" RegCloseKey hKey End Function Public Function SetRegValue(KeyRoot As T_KeyClasses, Path As String, sKey As String, NewValue As String) As Boolean Dim hKey As Long Dim KeyValType As Long Dim KeyValSize As Long Dim KeyVal As String Dim tmpVal As String Dim res As Long Dim i As Integer Dim x As Long res = RegOpenKeyEx(KeyRoot, Path, 0, KEY_ALL_ACCESS, hKey) If res <> 0 Then GoTo Errore tmpVal = String(1024, 0) KeyValSize = 1024 res = RegQueryValueEx(hKey, sKey, 0, KeyValType, tmpVal, KeyValSize) Select Case res Case 2 KeyValType = REG_SZ Case Is <> 0 GoTo Errore End Select Select Case KeyValType Case REG_SZ tmpVal = NewValue Case REG_DWORD x = Val(NewValue) tmpVal = "" For i = 0 To 3 tmpVal = tmpVal & chr ( x Mod 256) x = x \ 256 Next End Select KeyValSize = Len(tmpVal) res = RegSetValueEx(hKey, sKey, 0, KeyValType, tmpVal, KeyValSize) If res <> 0 Then GoTo Errore SetRegValue = True RegCloseKey hKey Exit Function Errore: SetRegValue = False RegCloseKey hKey End Function 'Add five Command Buttons To your Form and Insert the following code: Private Sub Command1_Click() 'This will get the value of 'wallpaper' key from 'HKEY_CURRENT_USER\Control Panel\Desktop' path MsgBox GetRegValue(HKEY_CURRENT_USER, "Control Panel\Desktop", "wallpaper") End Sub Private Sub Command2_Click() 'This will create the path 'HKEY_CURRENT_USER\TestKey\MySubKey' CreateRegistryKey HKEY_CURRENT_USER, "TestKey\MySubKey" End Sub Private Sub Command3_Click() 'This will delete the path 'HKEY_CURRENT_USER\TestKey' and all its Sub Directories DeleteRegistryKey HKEY_CURRENT_USER, "TestKey" End Sub Private Sub Command4_Click() 'This will change the value of 'TestKeyName' Key that in the path HKEY_CURRENT_USER\TestKey\MySubKey. 'To set the Key value you must first create the key path (as mention in Command2_Click) SetRegValue HKEY_CURRENT_USER, "TestKey\MySubKey", "TestKeyName", "MyValue" End Sub Private Sub Command5_Click() 'This will delete the Key 'TestKeyName' that found in the path HKEY_CURRENT_USER\TestKey\MySubKey DeleteValue HKEY_CURRENT_USER, "TestKey\MySubKey", "TestKeyName" End Sub |
Tags: activex code, api routines, code, data, free source code, learn visual basic, load, programs, Registry, save, vb6, vb6 learn, vb6 tutorial, visual basic library