powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Перебор разделов реестра
4 сообщений из 4, страница 1 из 1
Перебор разделов реестра
    #33599070
Ruslan B.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Подскажите как перебрать подразделы определенного раздела реестра, например для заполнения списка на форме. Естественно кол-во и названия подразделов неизвестны, а были записаны коммандой SaveSetting.
...
Рейтинг: 0 / 0
Перебор разделов реестра
    #33599368
TIKO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
пример из MSDN

GetAllSettings(appname, section)

Private Sub Form_Load()
Dim avntSettings As Variant
Dim intX As Integer
avntSettings = GetAllSettings("RegCust", "Startup")
For intX = 0 To UBound(avntSettings, 1)
Debug.Print avntSettings(intX, 0), _
avntSettings(intX, 1)
Next intX
End Sub
...
Рейтинг: 0 / 0
Перебор разделов реестра
    #33599567
Ruslan B.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
TIKOGetAllSettings(appname, section)
Из справки: "функция GetAllSettings не возвращает
имена приложений и имена разделов, указанных в
параметре Section".
Т.е. она возвращает названия и значения строковых параметров ,
а мне нужны именно названия разделов.
Помогите плиз.
...
Рейтинг: 0 / 0
Перебор разделов реестра
    #33600788
Для формирования списка подразделов заданного раздела тебе понадобится WinAPI функция RegEnumKeyEx.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
Private Type FILETIME
    intLow As Long
    intHigh As Long
End Type

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 RegEnumKeyEx Lib "advapi32.dll" _
  Alias "RegEnumKeyExA" ( _
  ByVal hKey As Long, _
  ByVal dwIndex As Long, _
  ByVal lpName As String, _
  lpcbName As Long, _
  ByVal lpReserved As Long, _
  ByVal lpClass As String, _
  lpcbClass As Long, _
  lpftLastWriteTime As FILETIME) As Long

Private Declare Function RegCloseKey Lib "advapi32.dll" ( _
  ByVal hKey As Long) As Long

Public Const HKEY_CLASSES_ROOT = &H80000000
Public Const HKEY_CURRENT_USER = &H80000001
Public Const HKEY_LOCAL_MACHINE = &H80000002
Public Const HKEY_USERS = &H80000003

Private Const cSuccess =  0 &

Private Const SYNCHRONIZE = &H100000
Private Const STANDARD_RIGHTS_READ = &H20000
Private Const KEY_QUERY_VALUE = &H1
Private Const KEY_ENUMERATE_SUB_KEYS = &H8
Private Const KEY_NOTIFY = &H10
Private Const KEY_READ = ((STANDARD_RIGHTS_READ Or _
  KEY_QUERY_VALUE Or _
  KEY_ENUMERATE_SUB_KEYS Or _
  KEY_NOTIFY) And _
  (Not SYNCHRONIZE))

Public Sub ListSubKeys( _
  hKeyRoot As Long, _
  strSubKey As String)
    Dim hSubKey As Long
    Dim cEnum As Long
    Dim hKey As Long
    Dim lngResult As Long
    Dim strNameBuff As String
    Dim cbNameBuff As Long
    Dim strClassBuff As String
    Dim cbClassBuff As Long
    Dim typFileTime As FILETIME
    
    lngResult = RegOpenKeyEx(hKeyRoot, strSubKey, _
       0 &, KEY_READ, hSubKey)
    
    If lngResult = cSuccess Then
        Do
            strNameBuff = Space$( 255 )
            cbNameBuff = Len(strNameBuff)
            strClassBuff = Space$( 255 )
            cbClassBuff = Len(strClassBuff)
            
            lngResult = RegEnumKeyEx(hSubKey, cEnum, _
              strNameBuff, cbNameBuff,  0 &, _
              strClassBuff, cbClassBuff, typFileTime)
              
            If lngResult = cSuccess Then
                Debug.Print Left(strNameBuff, cbNameBuff)
            End If
            
            cEnum = cEnum +  1 
        Loop Until lngResult <>  0 
        
        lngResult = RegCloseKey(hSubKey)
    End If
End Sub

Вызываешь так:

Код: plaintext
ListSubKeys HKEY_CURRENT_USER, "Software\VB and VBA Program Settings"
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Перебор разделов реестра
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]