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 Small banner for links to this site: |
diff --git a/Registry.bas b/Registry.bas
--- a/Registry.bas
+++ b/Registry.bas
-Attribute VB_Name = "RegistryFunctions"
-Option Explicit
-
-Private Const HKEY_CLASSES_ROOT = &H80000000
-Private Const HKEY_CURRENT_USER = &H80000001
-Private Const HKEY_LOCAL_MACHINE = &H80000002
-Private Const HKEY_USERS = &H80000003
-Private Const HKEY_PERFORMANCE_DATA = &H80000004
-Private Const HKEY_CURRENT_CONFIG = &H80000005
-Private Const HKEY_DYN_DATA = &H80000006
-Private Const STANDARD_RIGHTS_ALL = &H1F0000
-Private Const KEY_QUERY_VALUE = &H1
-Private Const KEY_SET_VALUE = &H2
-Private Const KEY_CREATE_SUB_KEY = &H4
-Private Const KEY_ENUMERATE_SUB_KEYS = &H8
-Private Const KEY_NOTIFY = &H10
-Private Const SYNCHRONIZE = &H100000
-Private Const KEY_CREATE_LINK = &H20
-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 REG_OPTION_NON_VOLATILE = 0
-Global Const REG_NONE = 0
-Global Const REG_SZ = 1
-Global Const REG_EXPAND_SZ = 2
-Global Const REG_BINARY = 3
-Global Const REG_DWORD = 4
-Global Const REG_DWORD_LITTLE_ENDIAN = 4 ' Same as REG_DWORD
-Global Const REG_DWORD_BIG_ENDIAN = 5
-Global Const REG_LINK = 6
-Global Const REG_MULTI_SZ = 7
-Global Const REG_RESOURCE_LIST = 8
-Global Const REG_FULL_RESOURCE_DESCRIPTOR = 9
-Global Const REG_RESOURCE_REQUIREMENTS_LIST = 10
-
-Private Const REG_CREATED_NEW_KEY = &H1
-Private Const REG_OPENED_EXISTING_KEY = &H2
-
-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 Long
-Private Declare Function RegCloseKey Lib "advapi32.dll" _
- (ByVal hKey As Long) As Long
-Private Declare Function RegEnumValue Lib "advapi32.dll" _
- Alias "RegEnumValueA" (ByVal hKey As Long, ByVal dwIndex _
- As Long, lpValueName As String, lpcbValueName As Long, ByVal _
- lpReserved As Long, lpType As Long, lpData As Any, lpcbData As _
- Long) As Long
-Private Declare Function RegEnumKeyEx Lib "advapi32.dll" _
- Alias "RegEnumKeyExA" (ByVal hKey As Long, ByVal dwIndex _
- As Long, lpName As String, lpcbName As Long, ByVal _
- lpReserved As Long, lpClass As String, lpcbClass As _
- Long, lpftLastWriteTime As Any) As Long
-Private Declare Function RegQueryValueEx Lib "advapi32.dll" _
- Alias "RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName _
- As String, ByVal lpReserved As Long, lpType As Long, lpData As _
- Any, lpcbData As Long) As Long
-Private 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 Any, phkResult _
- As Long, lpdwDisposition As Long) As Long
-Private 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 Long
-Private Declare Function RegDeleteValue Lib "advapi32.dll" _
- Alias "RegDeleteValueA" (ByVal hKey As Long, ByVal _
- lpValueName As String) As Long
-Private Declare Function RegDeleteKey Lib "advapi32.dll" Alias _
- "RegDeleteKeyA" (ByVal hKey As Long, ByVal lpSubKey As String) As Long
-Sub ConvertValueName(Path As String, ByRef hKey As Long, ByRef Key As String, ValueName As String)
-Dim Data As String, bNum As Long
-Data = Mid$(Path, 1, InStr(Path, "\") - 1)
-Select Case Data
-Case "HKEY_CLASSES_ROOT"
-hKey = HKEY_CLASSES_ROOT
-Case "HKEY_CURRENT_USER"
-hKey = HKEY_CURRENT_USER
-Case "HKEY_LOCAL_MACHINE"
-hKey = HKEY_LOCAL_MACHINE
-Case "HKEY_USERS"
-hKey = HKEY_USERS
-Case "HKEY_PERFORMANCE_DATA"
-hKey = HKEY_PERFORMANCE_DATA
-Case "HKEY_CURRENT_CONFIG"
-hKey = HKEY_CURRENT_CONFIG
-Case "HKEY_DYN_DATA"
-hKey = HKEY_DYN_DATA
-End Select
-bNum = 1
-Do Until InStr(bNum, Path, "\") = 0
-bNum = InStr(bNum, Path, "\") + 1
-Loop
-On Error Resume Next
-Key = Mid$(Path, Len(Data) + 2, bNum - 2 - (Len(Data) + 1))
-ValueName = Mid$(Path, bNum)
-On Error GoTo 0
-End Sub
-Function GetReg(Path As String, Optional Default)
-Attribute GetReg.VB_Description = "Reads a value from the registry."
-Dim hKey As Long, kHandle As Long, Key As String, ValueName As String, Data As String, vLen As Long, vType As Long, NumData As Long
-ConvertValueName Path, hKey, Key, ValueName
-If RegOpenKeyEx(hKey, Key, 0&, KEY_QUERY_VALUE, kHandle) = 0 Then
- If RegQueryValueEx(kHandle, ValueName, 0&, vType, ByVal 0&, vLen) = 0 Then
- Data = String$(vLen, Chr$(0))
- If vType = REG_DWORD Or vType = REG_DWORD_BIG_ENDIAN Then
- If RegQueryValueEx(kHandle, ValueName, 0&, 0&, NumData, vLen) = 0 Then
- GetReg = NumData
- End If
- Else
- If RegQueryValueEx(kHandle, ValueName, 0&, 0&, ByVal Data, vLen) = 0 Then
- If vType = REG_SZ Or vType = REG_EXPAND_SZ Or vType = REG_MULTI_SZ Then
- Data = Left$(Data, vLen - 1)
- If Data <> "" Then GetReg = Data
- Else
- GetReg = Data
- End If
- End If
- End If
- End If
- RegCloseKey kHandle
- If Not IsEmpty(GetReg) Then Exit Function
-End If
-If Not IsError(Default) Then GetReg = Default
-End Function
-Function GetRegType(Path As String) As Long
-Dim hKey As Long, kHandle As Long, Key As String, ValueName As String, Data As String, vLen As Long, vType As Long
-ConvertValueName Path, hKey, Key, ValueName
-If RegOpenKeyEx(hKey, Key, 0&, KEY_QUERY_VALUE, kHandle) = 0 Then
- If RegQueryValueEx(kHandle, ValueName, 0&, vType, ByVal 0&, ByVal 0&) Then
- GetRegType = vType
- End If
- RegCloseKey kHandle
-End If
-End Function
-Function EnumReg(ByVal Path As String, Index As Long) As String
-Dim hKey As Long, kHandle As Long, Key As String, ValueName As String, Data As String, vLen As Long
-If Right$(Path, 1) <> "\" Then Path = Path + "\"
-ConvertValueName Path, hKey, Key, ValueName
-ValueName = ""
-If RegOpenKeyEx(hKey, Key, 0&, KEY_QUERY_VALUE, kHandle) = 0 Then
- vLen = 255
- Data = String$(255, Chr$(0))
- If RegEnumValue(kHandle, Index, ByVal Data, vLen, 0&, 0&, ByVal 0&, 0&) = 0 Then
- Data = Left$(Data, vLen)
- If Data = String$(255, Chr$(0)) Then Data = ""
- EnumReg = Data
- End If
- RegCloseKey kHandle
-End If
-End Function
-Function EnumKey(ByVal Path As String, Index As Long) As String
-Dim hKey As Long, kHandle As Long, Key As String, ValueName As String, Data As String, vLen As Long
-If Right$(Path, 1) <> "\" Then Path = Path + "\"
-ConvertValueName Path, hKey, Key, ValueName
-ValueName = ""
-If RegOpenKeyEx(hKey, Key, 0&, KEY_ENUMERATE_SUB_KEYS, kHandle) = 0 Then
- vLen = 255
- Data = String$(255, Chr$(0))
- If RegEnumKeyEx(kHandle, Index, ByVal Data, vLen, 0&, ByVal 0&, 0&, ByVal 0&) = 0 Then
- Data = Left$(Data, vLen)
- If Data = String$(255, Chr$(0)) Then Data = ""
- EnumKey = Data
- End If
- RegCloseKey kHandle
-End If
-End Function
-Sub MultiStringToArray(MultiString As String, ByRef StrArray() As String)
-Dim cNum As Long, cNum2 As Long
-ReDim StrArray(0)
-For cNum = 1 To Len(MultiString)
- cNum2 = InStr(cNum, MultiString, Chr(0))
- If cNum2 = 0 Then cNum2 = Len(MultiString) + 1
- ReDim Preserve StrArray(UBound(StrArray) + 1)
- StrArray(UBound(StrArray)) = Mid$(MultiString, cNum, cNum2 - cNum)
- cNum = cNum2
-Next cNum
-End Sub
-Sub ArrayToMultiString(StrArray() As String, ByRef MultiString As String)
-Dim sNum As Long
-MultiString = ""
-For sNum = 1 To UBound(StrArray)
- MultiString = MultiString + StrArray(sNum) + Chr$(0)
-Next sNum
-End Sub
-Sub NewKey(ByVal Path As String, Optional Default, Optional vType)
-Attribute NewKey.VB_Description = "Creates a new key in the registry."
-Dim hKey As Long, kHandle As Long, Key As String, ValueName As String, Temp As Long, Setg As String, NumData As Long
-If Right$(Path, 1) <> "\" Then Path = Path + "\"
-ConvertValueName Path, hKey, Key, ValueName
-ValueName = ""
-If RegCreateKeyEx(hKey, Key, 0&, 0&, REG_OPTION_NON_VOLATILE, KEY_CREATE_SUB_KEY Or KEY_SET_VALUE, ByVal 0&, kHandle, Temp) = 0 Then
- If Not IsError(Default) Then
- If IsError(vType) Then vType = REG_SZ
- If vType = REG_DWORD Or vType = REG_DWORD_BIG_ENDIAN Then
- NumData = Default
- RegSetValueEx kHandle, ValueName, 0&, vType, NumData, 4
- Else
- Setg = Default
- If vType = REG_SZ Or vType = REG_EXPAND_SZ Or vType = REG_MULTI_SZ Then _
- Setg = Setg + Chr$(0)
- RegSetValueEx kHandle, ValueName, 0&, vType, ByVal Setg, Len(Setg)
- End If
- End If
- RegCloseKey kHandle
-End If
-End Sub
-Sub SetReg(Path As String, NewValue, Optional vType)
-Attribute SetReg.VB_Description = "Writes a value to the registry."
-Dim hKey As Long, kHandle As Long, Key As String, ValueName As String, Setg As String, NumData As Long
-ConvertValueName Path, hKey, Key, ValueName
-If RegOpenKeyEx(hKey, Key, 0&, KEY_SET_VALUE, kHandle) = 0 Then
- If IsError(vType) Then vType = REG_SZ
- If vType = REG_DWORD Or vType = REG_DWORD_BIG_ENDIAN Then
- NumData = NewValue
- RegSetValueEx kHandle, ValueName, 0&, vType, NumData, 4
- Else
- Setg = NewValue
- If vType = REG_SZ Or vType = REG_EXPAND_SZ Or vType = REG_MULTI_SZ Then _
- Setg = Setg + Chr$(0)
- RegSetValueEx kHandle, ValueName, 0&, vType, ByVal Setg, Len(Setg)
- End If
- RegCloseKey kHandle
-End If
-End Sub
-Sub DelReg(Path As String)
-Attribute DelReg.VB_Description = "Deletes a value from the registry."
-Dim hKey As Long, kHandle As Long, Key As String, ValueName As String
-ConvertValueName Path, hKey, Key, ValueName
-If RegOpenKeyEx(hKey, Key, 0&, KEY_SET_VALUE, kHandle) = 0 Then
- RegDeleteValue kHandle, ValueName
- RegCloseKey kHandle
-End If
-End Sub
-Sub DelKey(ByVal Path As String)
-Attribute DelKey.VB_Description = "Deletes a key from the registry."
-Dim hKey As Long, Key As String, Data As String
-If Right$(Path, 1) <> "\" Then Path = Path + "\"
-ConvertValueName Path, hKey, Key, Data
-RegDeleteKey hKey, Key
-End Sub
+Attribute VB_Name = "RegistryFunctions"\r
+Option Explicit\r
+\r
+Private Const HKEY_CLASSES_ROOT = &H80000000\r
+Private Const HKEY_CURRENT_USER = &H80000001\r
+Private Const HKEY_LOCAL_MACHINE = &H80000002\r
+Private Const HKEY_USERS = &H80000003\r
+Private Const HKEY_PERFORMANCE_DATA = &H80000004\r
+Private Const HKEY_CURRENT_CONFIG = &H80000005\r
+Private Const HKEY_DYN_DATA = &H80000006\r
+Private Const STANDARD_RIGHTS_ALL = &H1F0000\r
+Private Const KEY_QUERY_VALUE = &H1\r
+Private Const KEY_SET_VALUE = &H2\r
+Private Const KEY_CREATE_SUB_KEY = &H4\r
+Private Const KEY_ENUMERATE_SUB_KEYS = &H8\r
+Private Const KEY_NOTIFY = &H10\r
+Private Const SYNCHRONIZE = &H100000\r
+Private Const KEY_CREATE_LINK = &H20\r
+Private Const KEY_ALL_ACCESS = ((STANDARD_RIGHTS_ALL Or _\r
+ KEY_QUERY_VALUE Or KEY_SET_VALUE Or KEY_CREATE_SUB_KEY _\r
+ Or KEY_ENUMERATE_SUB_KEYS Or KEY_NOTIFY Or _\r
+ KEY_CREATE_LINK) And (Not SYNCHRONIZE))\r
+Private Const REG_OPTION_NON_VOLATILE = 0\r
+Global Const REG_NONE = 0\r
+Global Const REG_SZ = 1\r
+Global Const REG_EXPAND_SZ = 2\r
+Global Const REG_BINARY = 3\r
+Global Const REG_DWORD = 4\r
+Global Const REG_DWORD_LITTLE_ENDIAN = 4 ' Same as REG_DWORD\r
+Global Const REG_DWORD_BIG_ENDIAN = 5\r
+Global Const REG_LINK = 6\r
+Global Const REG_MULTI_SZ = 7\r
+Global Const REG_RESOURCE_LIST = 8\r
+Global Const REG_FULL_RESOURCE_DESCRIPTOR = 9\r
+Global Const REG_RESOURCE_REQUIREMENTS_LIST = 10\r
+\r
+Private Const REG_CREATED_NEW_KEY = &H1\r
+Private Const REG_OPENED_EXISTING_KEY = &H2\r
+\r
+Private Declare Function RegOpenKeyEx Lib "advapi32.dll" Alias "RegOpenKeyExA" _\r
+ (ByVal hKey As Long, ByVal lpSubKey As String, ByVal ulOptions As Long, _\r
+ ByVal samDesired As Long, phkResult As Long) As Long\r
+Private Declare Function RegCloseKey Lib "advapi32.dll" _\r
+ (ByVal hKey As Long) As Long\r
+Private Declare Function RegEnumValue Lib "advapi32.dll" _\r
+ Alias "RegEnumValueA" (ByVal hKey As Long, ByVal dwIndex _\r
+ As Long, lpValueName As String, lpcbValueName As Long, ByVal _\r
+ lpReserved As Long, lpType As Long, lpData As Any, lpcbData As _\r
+ Long) As Long\r
+Private Declare Function RegEnumKeyEx Lib "advapi32.dll" _\r
+ Alias "RegEnumKeyExA" (ByVal hKey As Long, ByVal dwIndex _\r
+ As Long, lpName As String, lpcbName As Long, ByVal _\r
+ lpReserved As Long, lpClass As String, lpcbClass As _\r
+ Long, lpftLastWriteTime As Any) As Long\r
+Private Declare Function RegQueryValueEx Lib "advapi32.dll" _\r
+ Alias "RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName _\r
+ As String, ByVal lpReserved As Long, lpType As Long, lpData As _\r
+ Any, lpcbData As Long) As Long\r
+Private Declare Function RegCreateKeyEx Lib "advapi32.dll" _\r
+ Alias "RegCreateKeyExA" (ByVal hKey As Long, ByVal lpSubKey _\r
+ As String, ByVal Reserved As Long, ByVal lpClass As String, _\r
+ ByVal dwOptions As Long, ByVal samDesired As Long, _\r
+ lpSecurityAttributes As Any, phkResult _\r
+ As Long, lpdwDisposition As Long) As Long\r
+Private Declare Function RegSetValueEx Lib "advapi32.dll" _\r
+ Alias "RegSetValueExA" (ByVal hKey As Long, ByVal lpValueName _\r
+ As String, ByVal Reserved As Long, ByVal dwType As Long, _\r
+ lpData As Any, ByVal cbData As Long) As Long\r
+Private Declare Function RegDeleteValue Lib "advapi32.dll" _\r
+ Alias "RegDeleteValueA" (ByVal hKey As Long, ByVal _\r
+ lpValueName As String) As Long\r
+Private Declare Function RegDeleteKey Lib "advapi32.dll" Alias _\r
+ "RegDeleteKeyA" (ByVal hKey As Long, ByVal lpSubKey As String) As Long\r
+Sub ConvertValueName(Path As String, ByRef hKey As Long, ByRef Key As String, ValueName As String)\r
+Dim Data As String, bNum As Long\r
+Data = Mid$(Path, 1, InStr(Path, "\") - 1)\r
+Select Case Data\r
+Case "HKEY_CLASSES_ROOT"\r
+hKey = HKEY_CLASSES_ROOT\r
+Case "HKEY_CURRENT_USER"\r
+hKey = HKEY_CURRENT_USER\r
+Case "HKEY_LOCAL_MACHINE"\r
+hKey = HKEY_LOCAL_MACHINE\r
+Case "HKEY_USERS"\r
+hKey = HKEY_USERS\r
+Case "HKEY_PERFORMANCE_DATA"\r
+hKey = HKEY_PERFORMANCE_DATA\r
+Case "HKEY_CURRENT_CONFIG"\r
+hKey = HKEY_CURRENT_CONFIG\r
+Case "HKEY_DYN_DATA"\r
+hKey = HKEY_DYN_DATA\r
+End Select\r
+bNum = 1\r
+Do Until InStr(bNum, Path, "\") = 0\r
+bNum = InStr(bNum, Path, "\") + 1\r
+Loop\r
+On Error Resume Next\r
+Key = Mid$(Path, Len(Data) + 2, bNum - 2 - (Len(Data) + 1))\r
+ValueName = Mid$(Path, bNum)\r
+On Error GoTo 0\r
+End Sub\r
+Function GetReg(Path As String, Optional Default)\r
+Attribute GetReg.VB_Description = "Reads a value from the registry."\r
+Dim 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
+ConvertValueName Path, hKey, Key, ValueName\r
+If RegOpenKeyEx(hKey, Key, 0&, KEY_QUERY_VALUE, kHandle) = 0 Then\r
+ If RegQueryValueEx(kHandle, ValueName, 0&, vType, ByVal 0&, vLen) = 0 Then\r
+ Data = String$(vLen, Chr$(0))\r
+ If vType = REG_DWORD Or vType = REG_DWORD_BIG_ENDIAN Then\r
+ If RegQueryValueEx(kHandle, ValueName, 0&, 0&, NumData, vLen) = 0 Then\r
+ GetReg = NumData\r
+ End If\r
+ Else\r
+ If RegQueryValueEx(kHandle, ValueName, 0&, 0&, ByVal Data, vLen) = 0 Then\r
+ If vType = REG_SZ Or vType = REG_EXPAND_SZ Or vType = REG_MULTI_SZ Then\r
+ Data = Left$(Data, vLen - 1)\r
+ If Data <> "" Then GetReg = Data\r
+ Else\r
+ GetReg = Data\r
+ End If\r
+ End If\r
+ End If\r
+ End If\r
+ RegCloseKey kHandle\r
+ If Not IsEmpty(GetReg) Then Exit Function\r
+End If\r
+If Not IsError(Default) Then GetReg = Default\r
+End Function\r
+Function GetRegType(Path As String) As Long\r
+Dim hKey As Long, kHandle As Long, Key As String, ValueName As String, Data As String, vLen As Long, vType As Long\r
+ConvertValueName Path, hKey, Key, ValueName\r
+If RegOpenKeyEx(hKey, Key, 0&, KEY_QUERY_VALUE, kHandle) = 0 Then\r
+ If RegQueryValueEx(kHandle, ValueName, 0&, vType, ByVal 0&, ByVal 0&) Then\r
+ GetRegType = vType\r
+ End If\r
+ RegCloseKey kHandle\r
+End If\r
+End Function\r
+Function EnumReg(ByVal Path As String, Index As Long) As String\r
+Dim hKey As Long, kHandle As Long, Key As String, ValueName As String, Data As String, vLen As Long\r
+If Right$(Path, 1) <> "\" Then Path = Path + "\"\r
+ConvertValueName Path, hKey, Key, ValueName\r
+ValueName = ""\r
+If RegOpenKeyEx(hKey, Key, 0&, KEY_QUERY_VALUE, kHandle) = 0 Then\r
+ vLen = 255\r
+ Data = String$(255, Chr$(0))\r
+ If RegEnumValue(kHandle, Index, ByVal Data, vLen, 0&, 0&, ByVal 0&, 0&) = 0 Then\r
+ Data = Left$(Data, vLen)\r
+ If Data = String$(255, Chr$(0)) Then Data = ""\r
+ EnumReg = Data\r
+ End If\r
+ RegCloseKey kHandle\r
+End If\r
+End Function\r
+Function EnumKey(ByVal Path As String, Index As Long) As String\r
+Dim hKey As Long, kHandle As Long, Key As String, ValueName As String, Data As String, vLen As Long\r
+If Right$(Path, 1) <> "\" Then Path = Path + "\"\r
+ConvertValueName Path, hKey, Key, ValueName\r
+ValueName = ""\r
+If RegOpenKeyEx(hKey, Key, 0&, KEY_ENUMERATE_SUB_KEYS, kHandle) = 0 Then\r
+ vLen = 255\r
+ Data = String$(255, Chr$(0))\r
+ If RegEnumKeyEx(kHandle, Index, ByVal Data, vLen, 0&, ByVal 0&, 0&, ByVal 0&) = 0 Then\r
+ Data = Left$(Data, vLen)\r
+ If Data = String$(255, Chr$(0)) Then Data = ""\r
+ EnumKey = Data\r
+ End If\r
+ RegCloseKey kHandle\r
+End If\r
+End Function\r
+Sub MultiStringToArray(MultiString As String, ByRef StrArray() As String)\r
+Dim cNum As Long, cNum2 As Long\r
+ReDim StrArray(0)\r
+For cNum = 1 To Len(MultiString)\r
+ cNum2 = InStr(cNum, MultiString, Chr(0))\r
+ If cNum2 = 0 Then cNum2 = Len(MultiString) + 1\r
+ ReDim Preserve StrArray(UBound(StrArray) + 1)\r
+ StrArray(UBound(StrArray)) = Mid$(MultiString, cNum, cNum2 - cNum)\r
+ cNum = cNum2\r
+Next cNum\r
+End Sub\r
+Sub ArrayToMultiString(StrArray() As String, ByRef MultiString As String)\r
+Dim sNum As Long\r
+MultiString = ""\r
+For sNum = 1 To UBound(StrArray)\r
+ MultiString = MultiString + StrArray(sNum) + Chr$(0)\r
+Next sNum\r
+End Sub\r
+Sub NewKey(ByVal Path As String, Optional Default, Optional vType)\r
+Attribute NewKey.VB_Description = "Creates a new key in the registry."\r
+Dim hKey As Long, kHandle As Long, Key As String, ValueName As String, Temp As Long, Setg As String, NumData As Long\r
+If Right$(Path, 1) <> "\" Then Path = Path + "\"\r
+ConvertValueName Path, hKey, Key, ValueName\r
+ValueName = ""\r
+If RegCreateKeyEx(hKey, Key, 0&, 0&, REG_OPTION_NON_VOLATILE, KEY_CREATE_SUB_KEY Or KEY_SET_VALUE, ByVal 0&, kHandle, Temp) = 0 Then\r
+ If Not IsError(Default) Then\r
+ If IsError(vType) Then vType = REG_SZ\r
+ If vType = REG_DWORD Or vType = REG_DWORD_BIG_ENDIAN Then\r
+ NumData = Default\r
+ RegSetValueEx kHandle, ValueName, 0&, vType, NumData, 4\r
+ Else\r
+ Setg = Default\r
+ If vType = REG_SZ Or vType = REG_EXPAND_SZ Or vType = REG_MULTI_SZ Then _\r
+ Setg = Setg + Chr$(0)\r
+ RegSetValueEx kHandle, ValueName, 0&, vType, ByVal Setg, Len(Setg)\r
+ End If\r
+ End If\r
+ RegCloseKey kHandle\r
+End If\r
+End Sub\r
+Sub SetReg(Path As String, NewValue, Optional vType)\r
+Attribute SetReg.VB_Description = "Writes a value to the registry."\r
+Dim hKey As Long, kHandle As Long, Key As String, ValueName As String, Setg As String, NumData As Long\r
+ConvertValueName Path, hKey, Key, ValueName\r
+If RegOpenKeyEx(hKey, Key, 0&, KEY_SET_VALUE, kHandle) = 0 Then\r
+ If IsError(vType) Then vType = REG_SZ\r
+ If vType = REG_DWORD Or vType = REG_DWORD_BIG_ENDIAN Then\r
+ NumData = NewValue\r
+ RegSetValueEx kHandle, ValueName, 0&, vType, NumData, 4\r
+ Else\r
+ Setg = NewValue\r
+ If vType = REG_SZ Or vType = REG_EXPAND_SZ Or vType = REG_MULTI_SZ Then _\r
+ Setg = Setg + Chr$(0)\r
+ RegSetValueEx kHandle, ValueName, 0&, vType, ByVal Setg, Len(Setg)\r
+ End If\r
+ RegCloseKey kHandle\r
+End If\r
+End Sub\r
+Sub DelReg(Path As String)\r
+Attribute DelReg.VB_Description = "Deletes a value from the registry."\r
+Dim hKey As Long, kHandle As Long, Key As String, ValueName As String\r
+ConvertValueName Path, hKey, Key, ValueName\r
+If RegOpenKeyEx(hKey, Key, 0&, KEY_SET_VALUE, kHandle) = 0 Then\r
+ RegDeleteValue kHandle, ValueName\r
+ RegCloseKey kHandle\r
+End If\r
+End Sub\r
+Sub DelKey(ByVal Path As String)\r
+Attribute DelKey.VB_Description = "Deletes a key from the registry."\r
+Dim hKey As Long, Key As String, Data As String\r
+If Right$(Path, 1) <> "\" Then Path = Path + "\"\r
+ConvertValueName Path, hKey, Key, Data\r
+RegDeleteKey hKey, Key\r
+End Sub\r
|