Declare Function RegEnumKeyEx Lib "advapi32" Alias "RegEnumKeyExA" ( _ ByVal hKey As Long, _ ByVal dwIndex As Long, _ ByVal lpName As String, _ lpcbName As Long, _ lpReserved As Long, _ ByVal lpClass As String, _ lpcbClass As Long, _ lpftLastWriteTime As FILETIME) As Long
RegEnumKeyEx перебирает все подразделы заданного раздела. Функция получает название подраздела, имя класса и время последней записи подраздела в реестр.
В случае успеха функция возвращает 0, в случае ошибки - код ошибки
' Перебираем подразделы раздела HKEY_LOCAL_MACHINE\Software Dim keyname As String ' имя каждого подраздела Dim keylen As Long ' длина имени подраздела Dim classname As String ' класс подраздела Dim classlen As Long ' длина имени класса Dim lastwrite As FILETIME ' время последней записи Dim hkey As Long ' дескриптор к разделу HKEY_LOCAL_MACHINE\Software Dim index As Long ' счетчик Dim retval As Long ' возвращаемое значение ' Открываем нужный раздел retval = RegOpenKeyEx(HKEY_LOCAL_MACHINE, "Software", 0, KEY_ENUMERATE_SUB_KEYS, hkey) ' Убеждаемся,что раздел открыт If retval <> 0 Then Debug.Print "Ошибка во время открытия раздела реестра" End ' завершаем работу End If ' Перебираем все подразделы index = 0 ' инициализируем счетчик While retval = 0 keyname = Space(255): classname = Space(255) keylen = 255: classname = 255 retval = RegEnumKeyEx(hkey, index, keyname, keylen, ByVal 0, classname, classlen, lastwrite) If retval = 0 Then ' Извлекаем информацию из буфера keyname = Left(keyname, keylen) classname = Left(classname, classlen) ' Выводим информацию Debug.Print "HKEY_LOCAL_MACHINE\Software\"; keyname Debug.Print " (class: "; classname End If index = index + 1 ' увеличиваем счетчик Wend ' завершаем цикл ' Закрываем раздел после завершения перебора retval = RegCloseKey(hkey)