EnumRegistryKeys – Retrieve all the subkeys of a Registry key

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 LongPrivate Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As _    LongPrivate Declare Function RegEnumKey Lib "advapi32.dll" Alias "RegEnumKeyA" _    (ByVal hKey As Long, ByVal dwIndex As Long, ByVal lpName As String, _    ByVal cbName As Long) As LongConst KEY_READ = &H20019  ' ((READ_CONTROL Or KEY_QUERY_VALUE Or                           ' KEY_ENUMERATE_SUB_KEYS Or KEY_NOTIFY) And (Not                           ' SYNCHRONIZE))' Enumerate registry keys under a given key'' returns a collection of stringsFunction EnumRegistryKeys(ByVal hKey As Long, ByVal KeyName As String) As _    Collection    Dim handle As Long    Dim length As Long    Dim index As Long    Dim subkeyName As String        ' initialize the result collection    Set EnumRegistryKeys = New Collection        ' Open the key, exit if not found    If Len(KeyName) Then        If RegOpenKeyEx(hKey, KeyName, 0, KEY_READ, handle) Then Exit Function        ' in all case the subsequent functions use hKey        hKey = handle    End If        Do        ' this is the max length for a key name        length = 260        subkeyName = Space$(length)        ' get the N-th key, exit the loop if not found        If RegEnumKey(hKey, index, subkeyName, length) Then Exit Do                ' add to the result collection        subkeyName = Left$(subkeyName, InStr(subkeyName, vbNullChar) - 1)        EnumRegistryKeys.Add subkeyName, subkeyName        ' prepare to query for next key        index = index + 1    Loop       ' Close the key, if it was actually opened    If handle Then RegCloseKey handle        End Function

Share the Post:
Share on facebook
Share on twitter
Share on linkedin

Overview

Recent Articles: