' Collection of code snippets by Arne Vajhøj ' posted to eksperten.dk, usenet and other places (2002-now) Private Const HKEY_CLASSES_ROOT = &H80000000 Private Const HKEY_CURRENT_CONFIG = &H80000005 Private Const HKEY_CURRENT_USER = &H80000001 Private Const HKEY_LOCAL_MACHINE = &H80000002 Private Const HKEY_USERS = &H80000003 Private Const KEY_QUERY_VALUE = 1 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 RegQueryValueEx Lib "advapi32.dll" Alias "RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, ByRef lpType As Long, lpData As Any, ByRef lpcbData As Long) As Long Private Declare Function RegOpenKey Lib "advapi32.dll" Alias "RegOpenKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long Private Declare Function RegDeleteValue Lib "advapi32.dll" Alias "RegDeleteValueA" (ByVal hKey As Long, ByVal lpValueName As String) As Long Private Function RegKeyGet(hKey As Long, sKeyPath As String, sValueName As String) As String Dim hSubkey As Long Dim lType As Long Dim sData As String Dim lDataLen As Long If RegOpenKeyEx(hKey, sKeyPath, 0, KEY_QUERY_VALUE, hSubkey) = 0 Then If RegQueryValueEx(hSubkey, sValueName, 0, lType, ByVal 0, lDataLen) = 0 Then sData = String(lDataLen, Chr(0)) Call RegQueryValueEx(hSubkey, sValueName, 0, lType, ByVal sData, lDataLen) RegKeyGet = sData Else RegKeyGet = "*" End If RegCloseKey hKey Else RegKeyGet = "*" End If End Function Function TestRegKeyGet() MsgBox (RegKeyGet(HKEY_LOCAL_MACHINE, "SOFTWARE\Microsoft\Windows NT\CurrentVersion", "ProductName")) MsgBox (RegKeyGet(HKEY_LOCAL_MACHINE, "SOFTWARE\Microsoft\Windows NT\CurrentVersionX", "ProductName")) MsgBox (RegKeyGet(HKEY_LOCAL_MACHINE, "SOFTWARE\Microsoft\Windows NT\CurrentVersion", "ProductNameX")) End Function ' change sValueName to String() if you want to call it with such Private Function RegKeyMultiGet(hKey As Long, sKeyPath As String, sValueName As Variant) As String() Dim hSubkey As Long Dim lType As Long Dim sData As String Dim lDataLen As Long Dim i As Integer If RegOpenKeyEx(hKey, sKeyPath, 0, KEY_QUERY_VALUE, hSubkey) = 0 Then Dim res() As String ReDim res(UBound(sValueName)) For i = 0 To UBound(sValueName) If RegQueryValueEx(hSubkey, sValueName(i), 0, lType, ByVal 0, lDataLen) = 0 Then sData = String(lDataLen, Chr(0)) Call RegQueryValueEx(hSubkey, sValueName(i), 0, lType, ByVal sData, lDataLen) res(i) = sData Else res(i) = "*" End If Next RegKeyMultiGet = res RegCloseKey hKey ' ???? Else RegKeyMultiGet = Array() End If End Function Function TestRegKeyMultiGet() Dim val As Variant For Each val In RegKeyMultiGet(HKEY_LOCAL_MACHINE, "SOFTWARE\Microsoft\Windows NT\CurrentVersion", Array("ProductName", "CSDVersion")) MsgBox val Next End Function Private Function RegDelete(hKey As Long, sKeyPath As String, sValueName As String) Dim hSubkey, res As Long If RegOpenKey(hKey, sKeyPath, hSubkey) = 0 Then res = RegDeleteValue(hSubkey, sValueName) End If RegCloseKey hSubkey RegDelete = res End Function Function test_delete() MsgBox (CStr(RegDelete(HKEY_LOCAL_MACHINE, "SOFTWARE\AAAA", "X"))) End Function