| Visual Basic имеет встроенные операторы и функции для работы с Системным Реестром (в дальнешем - реестр), он позволяет записывать, считывать и удалять данные только в разделе ключа HKEY_CURRENT_USER Software VB and VBA Program Setting. Операторы: Оператор SaveSetting - позволяет производить запись запись данных (автоматически создает подключи). Синтаксис: SaveSetting VBKeyName, Section, Key, Setting
 Где: SaveSetting имя самого оператора:
 VBKeyName строковое значение, которое является именем внутреннего
 подраздела VB and VBA Program Setting (иными словами,
 создаваемая Вами главная папка);
 Section строковое значение, которое является именем внутреннего подраздела VBKeyName (иными словами, создаваемая Вами
 папка находящаяся в Вашей главной папке. Таких Section -
 папок у Вас может быть несколько.);
 Key строковое значение, которое является именем параметра в созданном, внутреннем подразделе Section (иными словами,
 имя данных в созданной Вами Section - папке. Таких Key -
 параметров у Вас может буть несколько.); Setting строковое значение, которое Вы хотите присвоить созданному Вами параметру;
 Оператор DeleteSetting - позволяет удалять параметры и внутренние подразделы. Синтаксис: DeleteSetting VBKeyName, Section, Key Где: DeleteSetting имя самого оператора VBKeyName строковое значение, которое является именем внутреннего
 подраздела VB and VBA Program Setting (иными словами,
 созданная Вами главная папка);
 Section строковое значение, которое является именем внутреннего подраздела VBKeyName (иными словами, одна из созданных
 Вами папок находящихся в Вашей главной папке.);
 Key строковое значение, которое является именем параметра в удаляемом, внутреннем подразделе Section (иными словами,
 имя удаляемых данных);
 Если Вы захотите удалить сразу весь подраздел, а не некоторые параметры, то для этого используйте следующий синтаксис оператора DeleteSetting : DeleteSetting VBKeyName, Section Или, если Вы захотите удалить целиком созданный Вами внутренний подраздел VB and VBA Program Setting используйте следующий синтаксис оператора DeleteSetting : DeleteSetting VBKeyName Внимание!!! Пользуйтесь оператором DeleteSetting очень осторожно! Функции Функция GetSetting() - позволяет получить значения определенного параметра. Синтаксис MySet = GetSetting ( VBKeyName, Section, Key [, Default ] ) Где: MySet строка для хранения возвращаемого функцией GetSetting значения; GetSetting имя самой функции; VBKeyName строковое значение, которое является именем внутреннего подраздела
 VB and VBA Program Setting (иными словами, созданная Вами
 главная папка);
 Section строковое значение, которое является именем внутреннего подраздела VBKeyName (иными словами, имя папки находящаяся в Вашей
 главной папке.);
 Key строковое значение, которое является именем параметра в созданном, внутреннем подразделе Section (иными словами, имя данных
 в Section - папке.);
 Setting строковое значение, которое Вы хотите считать из данного параметра; [ Default ] необязательный аргумент, представляющий строковое значение, которое будет возвращено функцией в случае ошибки
 (если такого параметра нет);
 Функциа GetAllSettings() - позволяет получить массив значений из определенного подраздела. Синтаксис: MySet = GetAllSettings ( VBKeyName, Section) Где: MySet строка для хранения возвращаемого функцией GetAllSettings значения;
 GetAllSettings имя самой функции; VBKeyName строковое значение, которое является именем внутреннего
 подраздела VB and VBA Program Setting (иными словами,
 созданная Вами главная папка);
 Section строковое значение, которое является именем внутреннего подраздела VBKeyName (иными словами, имя папки
 находящаяся в Вашей главной папке.);
 Обработать массив значений и получить информацию в удобном виде можно следующим образом: Dim intSettings As Integer MySet = GetAllSettings(App.Title, "PortSettings") For intSettings = LBound(MySet, 1) To UBound(MySet, 1) Debug.Print MySet(intSettings, 0), MySet(intSettings, 1) Next intSettings End Sub Чтение/Запись данных в системный реестр (API):
 Объявите все константы и API-функции в отдельном модуле. Там же создайте функцию по созданию ключа, функцию записи в него данных, функцию считывания данных , функцию удаления данных из ключа и функцию удаления самого ключа. Option Explicit Public Const REG_SZ As Long = 1 Public Const REG_DWORD As Long = 4
 Public Const HKEY_LOCAL_MACHINE = &H80000002
 Public Const HKEY_CLASSES_ROOT = &H80000000
 Public Const HKEY_CURRENT_USER = &H80000001 Public Const HKEY_USERS = &H80000003
 Public Const ERROR_NONE = 0
 Public Const ERROR_BADDB = 1
 Public Const ERROR_BADKEY = 2
 Public Const ERROR_CANTOPEN = 3
 Public Const ERROR_CANTREAD = 4
 Public Const ERROR_CANTWRITE = 5
 Public Const ERROR_OUTOFMEMORY = 6
 Public Const ERROR_INVALID_PARAMETER = 7
 Public Const ERROR_ACCESS_DENIED = 8
 Public Const ERROR_INVALID_PARAMETERS = 87 Public Const ERROR_NO_MORE_ITEMS = 259
 Public Const KEY_ALL_ACCESS = &H3F Public Const REG_OPTION_NON_VOLATILE = 0 Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long 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, ByVal lpSecurityAttributes As Long, phkResult As Long, lpdwDisposition As Long) As Long
 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
 Declare Function RegQueryValueExString Lib "advapi32.dll" Alias "RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, lpType As Long, ByVal lpData As String, lpcbData As Long) As Long Declare Function RegQueryValueExLong Lib "advapi32.dll" Alias "RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, lpType As Long, lpData As Long , lpcbData As Long) As Long
 Declare Function RegQueryValueExNULL Lib "advapi32.dll" Alias "RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, lpType As Long, ByVal lpData As Long, lpcbData As Long) As Long Declare Function RegSetValueExString Lib "advapi32.dll" Alias "RegSetValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal Reserved As Long, ByVal dwType As Long, ByVal lpValue As String, ByVal cbData As Long) As Long Declare Function RegSetValueExLong Lib "advapi32.dll" Alias "RegSetValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal Reserved As Long, ByVal dwType As Long, lpValue As Long, ByVal cbData As Long) As Long Declare Function RegDeleteKey& Lib "advapi32.dll" Alias "RegDeleteKeyA" (ByVal hKey As Long, ByVal lpSubKey As String) Declare Function RegDeleteValue& Lib "advapi32.dll" Alias "RegDeleteValueA" (ByVal hKey As Long , ByVal lpValueName As String)
 Создание нового ключа (подключа)
 Public Function CreateNewKey(lPredefinedKey As Long, sNewKeyName As String) Dim hNewKey As Long Dim lRetVal As Long
 lRetVal = RegCreateKeyEx(lPredefinedKey, sNewKeyName, 0&, vbNullString, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, 0&, hNewKey, lRetVal) RegCloseKey (hNewKey) End Function Запись данных в ключ
 Public Function SetKeyValue(lPredefinedKey As Long, sKeyName As String, sValueName As String, vValueSetting As Variant, lValueType As Long)
 Dim lRetVal As Long Dim hKey As Long lRetVal = RegOpenKeyEx(lPredefinedKey, sKeyName, 0, KEY_ALL_ACCESS, hKey) lRetVal = SetValueEx(hKey, sValueName, lValueType, vValueSetting)
 RegCloseKey (hKey) End Function Public Function SetValueEx(ByVal hKey As Long, sValueName As String, lType As Long, vValue As Variant) As Long Dim lValue As Long Dim sValue As String
 Select Case lType Case REG_SZ
 sValue = vValue
 SetValueEx = RegSetValueExString(hKey, sValueName, 0&, lType, sValue, Len(sValue))
 Case REG_DWORD lValue = vValue
 SetValueEx = RegSetValueExLong(hKey, sValueName, 0&, lType, lValue, 4)
 End Select End Function Возвращает значения записанные в ключе Public Function QueryValue(lPredefinedKey As Long, sKeyName As String, sValueName As String) Dim lRetVal As Long Dim hKey As Long
 Dim vValue As Variant
 lRetVal = RegOpenKeyEx(lPredefinedKey, sKeyName, 0, KEY_ALL_ACCESS, hKey) lRetVal = QueryValueEx(hKey, sValueName, vValue)
 QueryValue = vValue RegCloseKey (hKey)
 End Function Function QueryValueEx(ByVal lhKey As Long, ByVal szValueName As String, vValue As Variant) As Long Dim cch As Long Dim lrc As Long
 Dim lType As Long
 Dim lValue As Long
 Dim sValue As String
 On Error GoTo QueryValueExError 'Определение размера и типа считываемых данных lrc = RegQueryValueExNULL(lhKey, szValueName, 0&, lType, 0&, cch) If lrc <> ERROR_NONE Then MsgBox "Данных (ключа) не существует!", vbExclamation, Form1.Caption Select Case lType 'Для символьных Case REG_SZ:
 sValue = String(cch, 0)
 lrc = RegQueryValueExString(lhKey, szValueName, 0&, lType, sValue, cch)
 If lrc = ERROR_NONE Then
 vValue = Left$(sValue, cch) Else vValue = Empty
 End If 'Для числовых Case REG_DWORD:
 lrc = RegQueryValueExLong(lhKey, szValueName, 0&, lType, lValue, cch) If lrc = ERROR_NONE Then vValue = lValue 'Для остальных не поддержанных типов данных Case Else
 lrc = -1
 End Select QueryValueExExit: QueryValueEx = lrc
 Exit Function
 QueryValueExError: Resume QueryValueExExit End Function Удаление значений ключа
 Public Function DeleteValue(lPredefinedKey As Long, sKeyName As String, sValueName As String) Dim lRetVal As Long Dim hKey As Long
 lRetVal = RegOpenKeyEx(lPredefinedKey, sKeyName, 0, KEY_ALL_ACCESS, hKey) lRetVal = RegDeleteValue(hKey, sValueName)
 RegCloseKey (hKey) End Function Удаление ключа
 Public Function DeleteKey(lPredefinedKey As Long, sKeyName As String) Dim lRetVal As Long lRetVal = RegDeleteKey(lPredefinedKey, sKeyName) End Function Вызов функций из модуля осуществляется следующим образом: Создание ключа CreateNewKey HKEY_LOCAL_MACHINE, "VB6" 'Можно создать и подключи 'CreateNewKey HKEY_LOCAL_MACHINE, "VB6RegistryKey"
 Запись данных в ключ SetKeyValue HKEY_LOCAL_MACHINE, "VB6", "Program", "Ваши данные", REG_SZ Считывание данных Dim Variable As Variant Variable = QueryValue(HKEY_LOCAL_MACHINE, "VB6", "Program") Удаление данных из ключа DeleteValue HKEY_LOCAL_MACHINE, "VB6", "Program" Удаление ключа DeleteKey HKEY_LOCAL_MACHINE, "VB6" Внимание! Соблюдайте осторожность, что бы не удалить главный ключ реестра Windows. |