Reads key from HKEY_LOCAL_MACHINE/Software.
Option Explicit Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long Const REG_SZ = 1 ' Unicode nul terminated string Const ERROR_SUCCESS = 0& Const KEY_ENUMERATE_SUB_KEYS = &H8 Const READ_CONTROL = &H20000 '(0x00020000L) Const KEY_NOTIFY = &H10 Const SYNCHRONIZE = &H100000 Const STANDARD_RIGHTS_READ = (READ_CONTROL) Const KEY_QUERY_VALUE = &H1 Const HKEY_LOCAL_MACHINE = &H80000002 Const KEY_READ = ((STANDARD_RIGHTS_READ Or KEY_QUERY_VALUE Or KEY_ENUMERATE_SUB_KEYS Or KEY_NOTIFY) And (Not SYNCHRONIZE)) 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 ' Note that if you declare the lpData parameter as String, you must pass it By Value. 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 Public Function ReadLocalPref$(ByVal Rkey$, ByVal KeyPrefix$) '********************************************************************** ' read a value from Hkey_Local_Machine Software '*********************************************************************** Dim hKey As Long Dim hkey2 As Long Dim ret As Long Dim num As Long Dim Value As String * 100 ' Dim KeyPrefix$ ret = RegOpenKeyEx(HKEY_LOCAL_MACHINE, "SOFTWARE", 0, KEY_READ, hKey) If ret <> ERROR_SUCCESS Then Else ret = RegOpenKeyEx(hKey, KeyPrefix, 0, KEY_READ, hkey2) If ret = ERROR_SUCCESS Then ret = RegQueryValueEx(hkey2, Rkey$, 0, REG_SZ, ByVal Value, 80&) If ret = ERROR_SUCCESS Then ReadLocalPref$ = StripTerminator(Value) End If ret = RegCloseKey(hkey2) End If ret = RegCloseKey(hKey) End If End Function