Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Перебор разделов реестра / 4 сообщений из 4, страница 1 из 1
14.03.2006, 12:32:59
    #33599070
Ruslan B.
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перебор разделов реестра
Подскажите как перебрать подразделы определенного раздела реестра, например для заполнения списка на форме. Естественно кол-во и названия подразделов неизвестны, а были записаны коммандой SaveSetting.
...
Рейтинг: 0 / 0
14.03.2006, 13:49:10
    #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
14.03.2006, 14:31:28
    #33599567
Ruslan B.
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перебор разделов реестра
TIKOGetAllSettings(appname, section)
Из справки: "функция GetAllSettings не возвращает
имена приложений и имена разделов, указанных в
параметре Section".
Т.е. она возвращает названия и значения строковых параметров ,
а мне нужны именно названия разделов.
Помогите плиз.
...
Рейтинг: 0 / 0
14.03.2006, 21:48:44
    #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
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Перебор разделов реестра / 4 сообщений из 4, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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