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