Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.72/18: Рейтинг темы: голосов - 18, средняя оценка - 4.72
307 / 138 / 6
Регистрация: 17.04.2013
Сообщений: 1,943
1

Получить список имен ключей в ветке реестра

12.02.2014, 17:01. Показов 3723. Ответов 18
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Для хранения данных (название песен) хочу использовать реестр
название ключа - название песни, значение ключа - время добавления песни

Cтолкнулся с проблемой - не знаю как получить список ключей в ветке


Читаю значения так
Visual Basic
1
2
3
4
5
6
7
8
Public Function RegRead(ByVal RegPath As String) As String
On Error GoTo IfErr
  Set Reg = CreateObject("WScript.Shell")
  RegRead = Reg.RegRead(RegPath)
  Set Reg = Nothing
Exit Function
IfErr: RegRead = ""
End Function
Есть ли аналог для получения списка имен ключей?


Использовать файл не хочу
Писать все в 1 ключ не вариант
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.02.2014, 17:01
Ответы с готовыми решениями:

Записать полученный список имён ключей реестра в txt файл
Как построчно записать полученный список имён ключей реестра в txt файл? Делал так: RegistryKey r...

Как получить доступ к 64-битной ветке реестра?
Как из 32-битного приложения на VB2010 получить доступ к 64-битной ветке реестра (OS Windows 7...

Запись полученных имен ключей реестра после 100 строки в текстовый файл
Этот код записывает полученные имена ключей из реестра. Как сделать так, чтобы список имен ключей...

Как из 32х битного приложения получить доступ к ветке реестра HKEY_LOCAL_MACHINE\SOFTWARE\ на 64x
Привет, Столкнулся с проблемой, читаю из ветки реестра 'HKEY_LOCAL_MACHINE\SOFTWARE\'...

18
Заблокирован
12.02.2014, 17:23 2
Основные ключи

HKEY_CURRENT_USER или HKCU
HKEY_LOCAL_MACHINE или HKLM
HKEY_CLASSES_ROOT или HKCR
HKEY_USERS или HKEY_USERS
HKEY_CURRENT_CONFIG

Пример :
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\CodePage\EUDCCodeRange

Добавлено через 5 минут
Наверное не совсем то, скорее всего там нужна функция
с названием KeyNext ... чтото вроде этого
1
307 / 138 / 6
Регистрация: 17.04.2013
Сообщений: 1,943
12.02.2014, 17:27  [ТС] 3
FelixMacintosh, нужна функция для получения списка с именами ключей
0
Заблокирован
12.02.2014, 17:58 4
А что если тебе поступить проще

GetAllSettings
0
307 / 138 / 6
Регистрация: 17.04.2013
Сообщений: 1,943
12.02.2014, 18:04  [ТС] 5
FelixMacintosh, она же, вроде, работает только в HKEY_CURRENT_USER/SOFTWARE/VB and VBA Program Settings/ ?
0
es geht mir gut
11270 / 4752 / 1183
Регистрация: 27.07.2011
Сообщений: 11,439
12.02.2014, 18:07 6
Цитата Сообщение от fireday Посмотреть сообщение
Для хранения данных (название песен) хочу использовать реестр
Не занимайтесь ерундой, реестр не для этого предназначен.
0
Заблокирован
12.02.2014, 18:08 7
Пример безопасного использования реестра

Visual Basic
1
2
3
4
5
6
7
8
9
Private Sub Command1_Click()
    Dim V, v1
    Call SaveSetting("X", "Y", "Z1", "=1")
    Call SaveSetting("X", "Y", "Z2", "=2")
    V = GetAllSettings("X", "Y")
    For Each v1 In V
        Print v1, GetSetting("X", "Y", v1)
    Next
End Sub
0
307 / 138 / 6
Регистрация: 17.04.2013
Сообщений: 1,943
12.02.2014, 18:12  [ТС] 8
FelixMacintosh, конечно спасибо, но писать надо не в HKEY_CURRENT_USER/SOFTWARE/VB and VBA Program Settings/

SoftIce, записи будут удаляться, можно удалить 1 запись в реестре, не трогая других, в файле так просто не выйдет

Над хранением в файле думал
строка - название песни, время добавления
но вот при удалении придется перезаписывать (ведь можно удалить из начала, а записей может быть большее 100)
0
Заблокирован
12.02.2014, 18:50 9
Набросал быстренько

Я просто сам не лезу никогда к реестру системных и прочих разделов, так как
не считаю свой уровень знаний, достаточным для этого

А чтоб удалить DeleteSetting
всё просто и безопасно используется 1 ветка реестра

Для демонстрации правильней было-бы даже так,
без конструкции For Each

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Private Sub Command1_Click()
    Dim V, v1, s$, j$(), f&
    s = "Пример записи параметров в раздел реестра"
    j = Split(s) 'Создаём список
    For f = 0 To UBound(j)
        Call SaveSetting("X", "Y", f, j(f)) 'Запись в реестр
    Next
    Cls
    V = GetAllSettings("X", "Y")
    For f = 0 To UBound(V)
        Print V(f, 0), V(f, 1)
    Next
    DeleteSetting "X", "Y" 'Полное удаление ветки "X", "Y"
End Sub
1
307 / 138 / 6
Регистрация: 17.04.2013
Сообщений: 1,943
12.02.2014, 19:22  [ТС] 10
FelixMacintosh, спасибо, но не стоило объяснять
0
Заблокирован
12.02.2014, 19:31 11
Ну мало, ли, теперь кто спросит, можно указать на эту страницу
А для чтения записи в системные разделы, вот ...
1
1484 / 579 / 106
Регистрация: 26.03.2012
Сообщений: 1,028
12.02.2014, 19:33 12
Цитата Сообщение от fireday Посмотреть сообщение
записи будут удаляться, можно удалить 1 запись в реестре, не трогая других, в файле так просто не выйдет
Над хранением в файле думал
строка - название песни, время добавления
но вот при удалении придется перезаписывать (ведь можно удалить из начала, а записей может быть большее 100)
Плохо думал, подумай еще раз в сторону ini или xml файла
Для примера, делал недавно библиотеку для книг fb2, в качестве базы использовал xml файл, в базе более 120 тысяч наименований книг, все работает довольно шустро.
1
307 / 138 / 6
Регистрация: 17.04.2013
Сообщений: 1,943
12.02.2014, 20:34  [ТС] 13
PAnT0P, пример кода для работы с xml привести можешь? (или не на вб писал?)
0
Заблокирован
12.02.2014, 21:08 14
можно из своей программы
считать//записать//удалить//сделать отдельную запись плейлиста (формат PLS)
ровно так, как это делает WinAmp или KMPlayer, тем более, что
информация там хранится обычным текстом

Добавлено через 5 минут
и отдельным файлом, можно вести записи как в полных путях, так и в отосительных,
а главное если всё правильно сделать будет полная совместимисть с популярными плейерами
1
1484 / 579 / 106
Регистрация: 26.03.2012
Сообщений: 1,028
12.02.2014, 21:16 15
Цитата Сообщение от fireday Посмотреть сообщение
PAnT0P, пример кода для работы с xml привести можешь? (или не на вб писал?)
Делал на VB.Net, если интересует завтра покажу

Добавлено через 6 минут
Но в твоем случае мне кажется больше подойдет ini файл
1
Заблокирован
12.02.2014, 22:02 16
а в реестр записать только путь последнего используемого
плейлиста, и номер трека, будет и абсолютная совместимость
и твоя программа писанная исключительно на VB 6.0 будет
помнить какая композиция проигрывалась

Добавлено через 6 минут
да чуть не забыл, не используй в реестре символы разделителя [ \ ]
так как при чтении это может трактоватся как отдельный раздел

Подменяй такие символы любым другим например: Key = Replace(Key, "\", "#")

Добавлено через 17 минут
Цитата Сообщение от fireday Посмотреть сообщение
Над хранением в файле думал
строка - название песни, время добавления
но вот при удалении придется перезаписывать (ведь можно удалить из начала, а записей может быть большее 100)
тоже не совсем понял, ты не знал о рандомном способе записи ?

Добавлено через 14 минут
Вот ссыль на демонстрацию произвольного доступа
0
Модератор
9724 / 3685 / 871
Регистрация: 22.02.2013
Сообщений: 5,530
Записей в блоге: 78
12.02.2014, 22:31 17
Лучший ответ Сообщение было отмечено как решение

Решение

Visual Basic
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
Option Explicit
 
Private 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 Long
Private Declare Function RegOpenKey Lib "advapi32.dll" Alias "RegOpenKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long
Private Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long
 
Private Const HKEY_CURRENT_USER = &H80000001
Private Const ERROR_NO_MORE_ITEMS = 259&
Private Const MAX_PATH = 260
 
Private Sub Form_Load()
    Dim hKey As Long, i As Long, q As Long, buf As String
    
    If RegOpenKey(HKEY_CURRENT_USER, "Software", hKey) Then Exit Sub
    
    buf = Space(MAX_PATH + 1)
    
    Do Until RegEnumKey(hKey, i, buf, MAX_PATH + 1)
        q = InStr(1, buf, vbNullChar)
        If q Then
            Debug.Print Left(buf, q)
        End If
        i = i + 1
        DoEvents
    Loop
    
    RegCloseKey hKey
End Sub
3
1484 / 579 / 106
Регистрация: 26.03.2012
Сообщений: 1,028
12.02.2014, 22:50 18
Вот накатал пример для хранения в ini файле
Вложения
Тип файла: zip Playlist.zip (4.1 Кб, 28 просмотров)
2
307 / 138 / 6
Регистрация: 17.04.2013
Сообщений: 1,943
13.02.2014, 23:04  [ТС] 19
PAnT0P, спасибо большое, хороший вариант. думаю так и реализую
0
13.02.2014, 23:04
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.02.2014, 23:04
Помогаю со студенческими работами здесь

Доступ к ветке реестра
Есть что-то криминальное в том, если поставить только чтение и выполнение вот на эту ветку: ...

Вопрос по ветке реестра
Нужна ли данная ветка реестра или ее лучше удалить? C:\WINDOWS\System32\hidserv.dll Активен Ключ...

Доступ к ветке реестра
Всем привет, проблемa в общем такая: У меня есть программа, которая обращается к вот такой ветке...

Нет доступа к ветке реестра
Всем доброго дня! Пытаюсь дать пользователю право и полный доступ на удаление параметра...

Как в ветке реестра сослаться на файл
Нужно в контекстное меню файла добавить действие *команда* *имя файла*. Как в ключе реестра...

Открыть редактор реестра в указанной ветке
нужен батник который открывает реестр по пути HKCR:local...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru