Current News
Archived News
Search News
Discussion Forum


Old Forum
Install Programs More Downloads...
Troubleshooting
Source Code
Format Specs.
Misc. Information
Non-SF Stuff
Links




CommitLineData
b31da37a 1Attribute VB_Name = "RegistryFunctions"\r
2Option Explicit\r
3\r
4Private Const HKEY_CLASSES_ROOT = &H80000000\r
5Private Const HKEY_CURRENT_USER = &H80000001\r
6Private Const HKEY_LOCAL_MACHINE = &H80000002\r
7Private Const HKEY_USERS = &H80000003\r
8Private Const HKEY_PERFORMANCE_DATA = &H80000004\r
9Private Const HKEY_CURRENT_CONFIG = &H80000005\r
10Private Const HKEY_DYN_DATA = &H80000006\r
11Private Const STANDARD_RIGHTS_ALL = &H1F0000\r
12Private Const KEY_QUERY_VALUE = &H1\r
13Private Const KEY_SET_VALUE = &H2\r
14Private Const KEY_CREATE_SUB_KEY = &H4\r
15Private Const KEY_ENUMERATE_SUB_KEYS = &H8\r
16Private Const KEY_NOTIFY = &H10\r
17Private Const SYNCHRONIZE = &H100000\r
18Private Const KEY_CREATE_LINK = &H20\r
19Private Const KEY_ALL_ACCESS = ((STANDARD_RIGHTS_ALL Or _\r
20 KEY_QUERY_VALUE Or KEY_SET_VALUE Or KEY_CREATE_SUB_KEY _\r
21 Or KEY_ENUMERATE_SUB_KEYS Or KEY_NOTIFY Or _\r
22 KEY_CREATE_LINK) And (Not SYNCHRONIZE))\r
23Private Const REG_OPTION_NON_VOLATILE = 0\r
24Global Const REG_NONE = 0\r
25Global Const REG_SZ = 1\r
26Global Const REG_EXPAND_SZ = 2\r
27Global Const REG_BINARY = 3\r
28Global Const REG_DWORD = 4\r
29Global Const REG_DWORD_LITTLE_ENDIAN = 4 ' Same as REG_DWORD\r
30Global Const REG_DWORD_BIG_ENDIAN = 5\r
31Global Const REG_LINK = 6\r
32Global Const REG_MULTI_SZ = 7\r
33Global Const REG_RESOURCE_LIST = 8\r
34Global Const REG_FULL_RESOURCE_DESCRIPTOR = 9\r
35Global Const REG_RESOURCE_REQUIREMENTS_LIST = 10\r
36\r
37Private Const REG_CREATED_NEW_KEY = &H1\r
38Private Const REG_OPENED_EXISTING_KEY = &H2\r
39\r
40Private Declare Function RegOpenKeyEx Lib "advapi32.dll" Alias "RegOpenKeyExA" _\r
41 (ByVal hKey As Long, ByVal lpSubKey As String, ByVal ulOptions As Long, _\r
42 ByVal samDesired As Long, phkResult As Long) As Long\r
43Private Declare Function RegCloseKey Lib "advapi32.dll" _\r
44 (ByVal hKey As Long) As Long\r
45Private Declare Function RegEnumValue Lib "advapi32.dll" _\r
46 Alias "RegEnumValueA" (ByVal hKey As Long, ByVal dwIndex _\r
47 As Long, lpValueName As String, lpcbValueName As Long, ByVal _\r
48 lpReserved As Long, lpType As Long, lpData As Any, lpcbData As _\r
49 Long) As Long\r
50Private Declare Function RegEnumKeyEx Lib "advapi32.dll" _\r
51 Alias "RegEnumKeyExA" (ByVal hKey As Long, ByVal dwIndex _\r
52 As Long, lpName As String, lpcbName As Long, ByVal _\r
53 lpReserved As Long, lpClass As String, lpcbClass As _\r
54 Long, lpftLastWriteTime As Any) As Long\r
55Private Declare Function RegQueryValueEx Lib "advapi32.dll" _\r
56 Alias "RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName _\r
57 As String, ByVal lpReserved As Long, lpType As Long, lpData As _\r
58 Any, lpcbData As Long) As Long\r
59Private Declare Function RegCreateKeyEx Lib "advapi32.dll" _\r
60 Alias "RegCreateKeyExA" (ByVal hKey As Long, ByVal lpSubKey _\r
61 As String, ByVal Reserved As Long, ByVal lpClass As String, _\r
62 ByVal dwOptions As Long, ByVal samDesired As Long, _\r
63 lpSecurityAttributes As Any, phkResult _\r
64 As Long, lpdwDisposition As Long) As Long\r
65Private Declare Function RegSetValueEx Lib "advapi32.dll" _\r
66 Alias "RegSetValueExA" (ByVal hKey As Long, ByVal lpValueName _\r
67 As String, ByVal Reserved As Long, ByVal dwType As Long, _\r
68 lpData As Any, ByVal cbData As Long) As Long\r
69Private Declare Function RegDeleteValue Lib "advapi32.dll" _\r
70 Alias "RegDeleteValueA" (ByVal hKey As Long, ByVal _\r
71 lpValueName As String) As Long\r
72Private Declare Function RegDeleteKey Lib "advapi32.dll" Alias _\r
73 "RegDeleteKeyA" (ByVal hKey As Long, ByVal lpSubKey As String) As Long\r
74Sub ConvertValueName(Path As String, ByRef hKey As Long, ByRef Key As String, ValueName As String)\r
75Dim Data As String, bNum As Long\r
76Data = Mid$(Path, 1, InStr(Path, "\") - 1)\r
77Select Case Data\r
78Case "HKEY_CLASSES_ROOT"\r
79hKey = HKEY_CLASSES_ROOT\r
80Case "HKEY_CURRENT_USER"\r
81hKey = HKEY_CURRENT_USER\r
82Case "HKEY_LOCAL_MACHINE"\r
83hKey = HKEY_LOCAL_MACHINE\r
84Case "HKEY_USERS"\r
85hKey = HKEY_USERS\r
86Case "HKEY_PERFORMANCE_DATA"\r
87hKey = HKEY_PERFORMANCE_DATA\r
88Case "HKEY_CURRENT_CONFIG"\r
89hKey = HKEY_CURRENT_CONFIG\r
90Case "HKEY_DYN_DATA"\r
91hKey = HKEY_DYN_DATA\r
92End Select\r
93bNum = 1\r
94Do Until InStr(bNum, Path, "\") = 0\r
95bNum = InStr(bNum, Path, "\") + 1\r
96Loop\r
97On Error Resume Next\r
98Key = Mid$(Path, Len(Data) + 2, bNum - 2 - (Len(Data) + 1))\r
99ValueName = Mid$(Path, bNum)\r
100On Error GoTo 0\r
101End Sub\r
102Function GetReg(Path As String, Optional Default)\r
103Attribute GetReg.VB_Description = "Reads a value from the registry."\r
104Dim hKey As Long, kHandle As Long, Key As String, ValueName As String, Data As String, vLen As Long, vType As Long, NumData As Long\r
105ConvertValueName Path, hKey, Key, ValueName\r
106If RegOpenKeyEx(hKey, Key, 0&, KEY_QUERY_VALUE, kHandle) = 0 Then\r
107 If RegQueryValueEx(kHandle, ValueName, 0&, vType, ByVal 0&, vLen) = 0 Then\r
108 Data = String$(vLen, Chr$(0))\r
109 If vType = REG_DWORD Or vType = REG_DWORD_BIG_ENDIAN Then\r
110 If RegQueryValueEx(kHandle, ValueName, 0&, 0&, NumData, vLen) = 0 Then\r
111 GetReg = NumData\r
112 End If\r
113 Else\r
114 If RegQueryValueEx(kHandle, ValueName, 0&, 0&, ByVal Data, vLen) = 0 Then\r
115 If vType = REG_SZ Or vType = REG_EXPAND_SZ Or vType = REG_MULTI_SZ Then\r
116 Data = Left$(Data, vLen - 1)\r
117 If Data <> "" Then GetReg = Data\r
118 Else\r
119 GetReg = Data\r
120 End If\r
121 End If\r
122 End If\r
123 End If\r
124 RegCloseKey kHandle\r
125 If Not IsEmpty(GetReg) Then Exit Function\r
126End If\r
127If Not IsError(Default) Then GetReg = Default\r
128End Function\r
129Function GetRegType(Path As String) As Long\r
130Dim hKey As Long, kHandle As Long, Key As String, ValueName As String, Data As String, vLen As Long, vType As Long\r
131ConvertValueName Path, hKey, Key, ValueName\r
132If RegOpenKeyEx(hKey, Key, 0&, KEY_QUERY_VALUE, kHandle) = 0 Then\r
133 If RegQueryValueEx(kHandle, ValueName, 0&, vType, ByVal 0&, ByVal 0&) Then\r
134 GetRegType = vType\r
135 End If\r
136 RegCloseKey kHandle\r
137End If\r
138End Function\r
139Function EnumReg(ByVal Path As String, Index As Long) As String\r
140Dim hKey As Long, kHandle As Long, Key As String, ValueName As String, Data As String, vLen As Long\r
141If Right$(Path, 1) <> "\" Then Path = Path + "\"\r
142ConvertValueName Path, hKey, Key, ValueName\r
143ValueName = ""\r
144If RegOpenKeyEx(hKey, Key, 0&, KEY_QUERY_VALUE, kHandle) = 0 Then\r
145 vLen = 255\r
146 Data = String$(255, Chr$(0))\r
147 If RegEnumValue(kHandle, Index, ByVal Data, vLen, 0&, 0&, ByVal 0&, 0&) = 0 Then\r
148 Data = Left$(Data, vLen)\r
149 If Data = String$(255, Chr$(0)) Then Data = ""\r
150 EnumReg = Data\r
151 End If\r
152 RegCloseKey kHandle\r
153End If\r
154End Function\r
155Function EnumKey(ByVal Path As String, Index As Long) As String\r
156Dim hKey As Long, kHandle As Long, Key As String, ValueName As String, Data As String, vLen As Long\r
157If Right$(Path, 1) <> "\" Then Path = Path + "\"\r
158ConvertValueName Path, hKey, Key, ValueName\r
159ValueName = ""\r
160If RegOpenKeyEx(hKey, Key, 0&, KEY_ENUMERATE_SUB_KEYS, kHandle) = 0 Then\r
161 vLen = 255\r
162 Data = String$(255, Chr$(0))\r
163 If RegEnumKeyEx(kHandle, Index, ByVal Data, vLen, 0&, ByVal 0&, 0&, ByVal 0&) = 0 Then\r
164 Data = Left$(Data, vLen)\r
165 If Data = String$(255, Chr$(0)) Then Data = ""\r
166 EnumKey = Data\r
167 End If\r
168 RegCloseKey kHandle\r
169End If\r
170End Function\r
171Sub MultiStringToArray(MultiString As String, ByRef StrArray() As String)\r
172Dim cNum As Long, cNum2 As Long\r
173ReDim StrArray(0)\r
174For cNum = 1 To Len(MultiString)\r
175 cNum2 = InStr(cNum, MultiString, Chr(0))\r
176 If cNum2 = 0 Then cNum2 = Len(MultiString) + 1\r
177 ReDim Preserve StrArray(UBound(StrArray) + 1)\r
178 StrArray(UBound(StrArray)) = Mid$(MultiString, cNum, cNum2 - cNum)\r
179 cNum = cNum2\r
180Next cNum\r
181End Sub\r
182Sub ArrayToMultiString(StrArray() As String, ByRef MultiString As String)\r
183Dim sNum As Long\r
184MultiString = ""\r
185For sNum = 1 To UBound(StrArray)\r
186 MultiString = MultiString + StrArray(sNum) + Chr$(0)\r
187Next sNum\r
188End Sub\r
189Sub NewKey(ByVal Path As String, Optional Default, Optional vType)\r
190Attribute NewKey.VB_Description = "Creates a new key in the registry."\r
191Dim hKey As Long, kHandle As Long, Key As String, ValueName As String, Temp As Long, Setg As String, NumData As Long\r
192If Right$(Path, 1) <> "\" Then Path = Path + "\"\r
193ConvertValueName Path, hKey, Key, ValueName\r
194ValueName = ""\r
195If RegCreateKeyEx(hKey, Key, 0&, 0&, REG_OPTION_NON_VOLATILE, KEY_CREATE_SUB_KEY Or KEY_SET_VALUE, ByVal 0&, kHandle, Temp) = 0 Then\r
196 If Not IsError(Default) Then\r
197 If IsError(vType) Then vType = REG_SZ\r
198 If vType = REG_DWORD Or vType = REG_DWORD_BIG_ENDIAN Then\r
199 NumData = Default\r
200 RegSetValueEx kHandle, ValueName, 0&, vType, NumData, 4\r
201 Else\r
202 Setg = Default\r
203 If vType = REG_SZ Or vType = REG_EXPAND_SZ Or vType = REG_MULTI_SZ Then _\r
204 Setg = Setg + Chr$(0)\r
205 RegSetValueEx kHandle, ValueName, 0&, vType, ByVal Setg, Len(Setg)\r
206 End If\r
207 End If\r
208 RegCloseKey kHandle\r
209End If\r
210End Sub\r
211Sub SetReg(Path As String, NewValue, Optional vType)\r
212Attribute SetReg.VB_Description = "Writes a value to the registry."\r
213Dim hKey As Long, kHandle As Long, Key As String, ValueName As String, Setg As String, NumData As Long\r
214ConvertValueName Path, hKey, Key, ValueName\r
215If RegOpenKeyEx(hKey, Key, 0&, KEY_SET_VALUE, kHandle) = 0 Then\r
216 If IsError(vType) Then vType = REG_SZ\r
217 If vType = REG_DWORD Or vType = REG_DWORD_BIG_ENDIAN Then\r
218 NumData = NewValue\r
219 RegSetValueEx kHandle, ValueName, 0&, vType, NumData, 4\r
220 Else\r
221 Setg = NewValue\r
222 If vType = REG_SZ Or vType = REG_EXPAND_SZ Or vType = REG_MULTI_SZ Then _\r
223 Setg = Setg + Chr$(0)\r
224 RegSetValueEx kHandle, ValueName, 0&, vType, ByVal Setg, Len(Setg)\r
225 End If\r
226 RegCloseKey kHandle\r
227End If\r
228End Sub\r
229Sub DelReg(Path As String)\r
230Attribute DelReg.VB_Description = "Deletes a value from the registry."\r
231Dim hKey As Long, kHandle As Long, Key As String, ValueName As String\r
232ConvertValueName Path, hKey, Key, ValueName\r
233If RegOpenKeyEx(hKey, Key, 0&, KEY_SET_VALUE, kHandle) = 0 Then\r
234 RegDeleteValue kHandle, ValueName\r
235 RegCloseKey kHandle\r
236End If\r
237End Sub\r
238Sub DelKey(ByVal Path As String)\r
239Attribute DelKey.VB_Description = "Deletes a key from the registry."\r
240Dim hKey As Long, Key As String, Data As String\r
241If Right$(Path, 1) <> "\" Then Path = Path + "\"\r
242ConvertValueName Path, hKey, Key, Data\r
243RegDeleteKey hKey, Key\r
244End Sub\r