Реестр

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Amigo
Начинающий
Начинающий
 
Сообщения: 13
Зарегистрирован: 05.01.2006 (Чт) 9:17
Откуда: Казахстан

Реестр

Сообщение Amigo » 06.01.2006 (Пт) 8:20

Люди, помогите!!! У меня не получается создать ключ в реестре!! Что я делаю не так??? Исходник прилагается
Вложения
registry.zip
Исходник тут
(2.77 Кб) Скачиваний: 15

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 06.01.2006 (Пт) 8:57

Первым делом поставь Option Explicit в первой строке модуля формы, объяви константы, такие как HKEY_CURRENT_USER и KEY_ALL_ACCESS как Long и иинициализируй их соответствующими значениями. А дальше читай хелп, хелп, и еще много много раз хелп.
Весь мир матрица, а мы в нем потоки байтов!

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 06.01.2006 (Пт) 9:26

я седни добрый, лови код создающий ключ в заданном месте реестра

Код: Выделить всё

Private Declare Function RegCreateKeyEx Lib "advapi32.dll" Alias "RegCreateKeyExA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal Reserved As Long, ByVal lpClass As String, ByVal dwOptions As Long, ByVal samDesired As Long, lpSecurityAttributes As SECURITY_ATTRIBUTES, phkResult As Long, lpdwDisposition As Long) As Long
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
'Корневые ключи реестра
Public Enum RootKeys
    HKEY_CLASSES_ROOT = &H80000000
    HKEY_CURRENT_USER = &H80000001
    HKEY_LOCAL_MACHINE = &H80000002
    HKEY_USERS = &H80000003
    HKEY_PERFORMANCE_DATA = &H80000004
    HKEY_CURRENT_CONFIG = &H80000005
    HKEY_DYN_DATA = &H80000006
End Enum
Private Const READ_CONTROL As Long = &H20000
Private Const SYNCHRONIZE = &H100000

Private Const STANDARD_RIGHTS_ALL As Long = &H1F0000
Private Const STANDARD_RIGHTS_EXECUTE As Long = (READ_CONTROL)
Private Const STANDARD_RIGHTS_READ As Long = (READ_CONTROL)
Private Const STANDARD_RIGHTS_REQUIRED As Long = &HF0000
Private Const STANDARD_RIGHTS_WRITE As Long = (READ_CONTROL)
Private Const REG_OPTION_NON_VOLATILE As Long = 0
Private Const REG_OPTION_VOLATILE As Long = 1
Private Const ERROR_SUCCESS As Long = 0
'Константы доступа к ключу
Public Enum AccessKey
    KEY_QUERY_VALUE = &H1
    KEY_SET_VALUE = &H2
    KEY_CREATE_SUB_KEY = &H4
    KEY_ENUMERATE_SUB_KEYS = &H8
    KEY_NOTIFY = &H10
    KEY_CREATE_LINK = &H20
    KEY_READ = ((STANDARD_RIGHTS_READ Or KEY_QUERY_VALUE Or KEY_ENUMERATE_SUB_KEYS Or KEY_NOTIFY) And (Not SYNCHRONIZE))
    KEY_WRITE = ((STANDARD_RIGHTS_WRITE Or KEY_SET_VALUE Or KEY_CREATE_SUB_KEY) And (Not SYNCHRONIZE))
    KEY_EXECUTE = ((KEY_READ) And (Not SYNCHRONIZE))
    KEY_ALL_ACCESS = ((STANDARD_RIGHTS_ALL Or KEY_QUERY_VALUE Or KEY_SET_VALUE Or KEY_CREATE_SUB_KEY Or KEY_ENUMERATE_SUB_KEYS Or KEY_NOTIFY Or KEY_CREATE_LINK) And (Not SYNCHRONIZE))
End Enum

'Создает подключ для заданного ключа
'ПАРАМЕТРЫ
'hRoot        - один из корневых ключей реестра
'sKeyName - имя, создаваемого ключа, типа "Company\Project\чей-то там еще"
'aDesired   - тип доступа к ключу
'fStore       - указывает на необходимость сохранения ключа после выключения/перезагрузки
'sClass       - тип класса ключа
'ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ
'дескриптор ключа при удачном его создании или 0, если ключ создан не был
Public Function CreateKey(ByVal hRoot As RootKeys, _
                                                ByVal sKeyName As String, _
                                                ByVal aDesired As AccessKey, _
                                                Optional ByVal fStore As Boolean = True, _
                                                Optional ByVal sClass As String) As Long

Dim hKey As Long
Dim errValue As Long
Dim dwOptions As Long
Dim sa As SECURITY_ATTRIBUTES
    dwOptions = IIf(fStore, REG_OPTION_NON_VOLATILE, _
        REG_OPTION_VOLATILE)
   
    errValue = RegCreateKeyEx(hRoot, sKeyName, 0&, sClass, dwOptions, aDesired, sa, hKey, 0&)
    If errValue = ERROR_SUCCESS Then
        CreateKey = hKey
    'Else
    'при необходимости здесь можно обработать полученный код ошибки
    End If
End Function
'Открывает существующий ключ
'ПАРАМЕТРЫ
'hRoot        - один из корневых ключей реестра
'sKeyName - имя, открываемого ключа, типа "Company\Project\чей-то там еще"
'aDesired   - тип доступа к ключу
'ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ
'дескриптор ключа при удачном его открытии или 0, если ключ открыт не был
Public Function OpenKey(ByVal hRoot As RootKeys, _
                                                ByVal sKeyName As String, _
                                                ByVal aDesired As AccessKey) As Long

Dim hKey As Long
Dim errValue As Long
   
    errValue = RegOpenKeyEx(hRoot, sKeyName, 0&, aDesired, hKey)
    If errValue = ERROR_SUCCESS Then
        OpenKey = hKey
    'Else
    'при необходимости здесь можно обработать полученный код ошибки
    End If
End Function


Но все равно читать хелпа НАДО!!!!
Весь мир матрица, а мы в нем потоки байтов!

Amigo
Начинающий
Начинающий
 
Сообщения: 13
Зарегистрирован: 05.01.2006 (Чт) 9:17
Откуда: Казахстан

Сообщение Amigo » 06.01.2006 (Пт) 10:01

!Viper! писал(а):я седни добрый, лови код создающий ключ в заданном месте реестра

Код: Выделить всё
Private Declare Function RegCreateKeyEx Lib "advapi32.dll" Alias "RegCreateKeyExA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal Reserved As Long, ByVal lpClass As String, ByVal dwOptions As Long, ByVal samDesired As Long, lpSecurityAttributes As SECURITY_ATTRIBUTES, phkResult As Long, lpdwDisposition As Long) As Long
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
'Корневые ключи реестра
Public Enum RootKeys
    HKEY_CLASSES_ROOT = &H80000000
    HKEY_CURRENT_USER = &H80000001
    HKEY_LOCAL_MACHINE = &H80000002
    HKEY_USERS = &H80000003
    HKEY_PERFORMANCE_DATA = &H80000004
    HKEY_CURRENT_CONFIG = &H80000005
    HKEY_DYN_DATA = &H80000006
End Enum
Private Const READ_CONTROL As Long = &H20000
Private Const SYNCHRONIZE = &H100000

Private Const STANDARD_RIGHTS_ALL As Long = &H1F0000
Private Const STANDARD_RIGHTS_EXECUTE As Long = (READ_CONTROL)
Private Const STANDARD_RIGHTS_READ As Long = (READ_CONTROL)
Private Const STANDARD_RIGHTS_REQUIRED As Long = &HF0000
Private Const STANDARD_RIGHTS_WRITE As Long = (READ_CONTROL)
Private Const REG_OPTION_NON_VOLATILE As Long = 0
Private Const REG_OPTION_VOLATILE As Long = 1
Private Const ERROR_SUCCESS As Long = 0
'Константы доступа к ключу
Public Enum AccessKey
    KEY_QUERY_VALUE = &H1
    KEY_SET_VALUE = &H2
    KEY_CREATE_SUB_KEY = &H4
    KEY_ENUMERATE_SUB_KEYS = &H8
    KEY_NOTIFY = &H10
    KEY_CREATE_LINK = &H20
    KEY_READ = ((STANDARD_RIGHTS_READ Or KEY_QUERY_VALUE Or KEY_ENUMERATE_SUB_KEYS Or KEY_NOTIFY) And (Not SYNCHRONIZE))
    KEY_WRITE = ((STANDARD_RIGHTS_WRITE Or KEY_SET_VALUE Or KEY_CREATE_SUB_KEY) And (Not SYNCHRONIZE))
    KEY_EXECUTE = ((KEY_READ) And (Not SYNCHRONIZE))
    KEY_ALL_ACCESS = ((STANDARD_RIGHTS_ALL Or KEY_QUERY_VALUE Or KEY_SET_VALUE Or KEY_CREATE_SUB_KEY Or KEY_ENUMERATE_SUB_KEYS Or KEY_NOTIFY Or KEY_CREATE_LINK) And (Not SYNCHRONIZE))
End Enum

'Создает подключ для заданного ключа
'ПАРАМЕТРЫ
'hRoot        - один из корневых ключей реестра
'sKeyName - имя, создаваемого ключа, типа "Company\Project\чей-то там еще"
'aDesired   - тип доступа к ключу
'fStore       - указывает на необходимость сохранения ключа после выключения/перезагрузки
'sClass       - тип класса ключа
'ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ
'дескриптор ключа при удачном его создании или 0, если ключ создан не был
Public Function CreateKey(ByVal hRoot As RootKeys, _
                                                ByVal sKeyName As String, _
                                                ByVal aDesired As AccessKey, _
                                                Optional ByVal fStore As Boolean = True, _
                                                Optional ByVal sClass As String) As Long

Dim hKey As Long
Dim errValue As Long
Dim dwOptions As Long
Dim sa As SECURITY_ATTRIBUTES
    dwOptions = IIf(fStore, REG_OPTION_NON_VOLATILE, _
        REG_OPTION_VOLATILE)
   
    errValue = RegCreateKeyEx(hRoot, sKeyName, 0&, sClass, dwOptions, aDesired, sa, hKey, 0&)
    If errValue = ERROR_SUCCESS Then
        CreateKey = hKey
    'Else
    'при необходимости здесь можно обработать полученный код ошибки
    End If
End Function
'Открывает существующий ключ
'ПАРАМЕТРЫ
'hRoot        - один из корневых ключей реестра
'sKeyName - имя, открываемого ключа, типа "Company\Project\чей-то там еще"
'aDesired   - тип доступа к ключу
'ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ
'дескриптор ключа при удачном его открытии или 0, если ключ открыт не был
Public Function OpenKey(ByVal hRoot As RootKeys, _
                                                ByVal sKeyName As String, _
                                                ByVal aDesired As AccessKey) As Long

Dim hKey As Long
Dim errValue As Long
   
    errValue = RegOpenKeyEx(hRoot, sKeyName, 0&, aDesired, hKey)
    If errValue = ERROR_SUCCESS Then
        OpenKey = hKey
    'Else
    'при необходимости здесь можно обработать полученный код ошибки
    End If
End Function


Но все равно читать хелпа НАДО!!!!



Спасибо большое!!!

JWST
Обычный пользователь
Обычный пользователь
 
Сообщения: 60
Зарегистрирован: 07.01.2006 (Сб) 21:05

Сообщение JWST » 07.01.2006 (Сб) 21:24

Может конечно и не совсем средствами VB но я бы сделал так.

regedit /s file.reg

пример содержания файла file.reg такое:

Windows Registry Editor Version 5.00
; Comparing: 04.01.2006 23:49:35 - 04.01.2006 23:50:31

; Удалить
[HKEY_LOCAL_MACHINE\SOFTWARE\PROGA\50]
"FirstRun" = -

;Добавить
[HKEY_LOCAL_MACHINE\SOFTWARE\PROGA\22]
"UC"=dword:00000124
"UserName"="ООпачки"

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 09.01.2006 (Пн) 8:23

Интересно, какое отношение имеет ответ JWST к вопросу? Вопрос был (по сути своей): "Где ошибка в моем коде, сделанном на VB для создания ключа в реестре"[/b]
Весь мир матрица, а мы в нем потоки байтов!

Tarik
Агент Системы
Агент Системы
Аватара пользователя
 
Сообщения: 1222
Зарегистрирован: 03.01.2003 (Пт) 16:05
Откуда: Москва

Сообщение Tarik » 09.01.2006 (Пн) 9:42

http://bbs.vbstreets.ru/viewtopic.php?t=9666

Отличный модуль для работы с реестром, разработанный GSerg'ом
Изображение

Ever tried? Ever failed? No matter. Try again! Fail again! Fail better!


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Google-бот и гости: 31

    TopList