Показать сообщение отдельно
Старый 21.12.2005, 14:59   #2
ErrorMs
Постоялец
 
Аватар для ErrorMs
 
Пол:Мужской
Регистрация: 09.07.2005
Сообщений: 300
Репутация: 286
По умолчанию Re: Программирование на Visual Basic любых версий

Почитай это...
Определение, которое даёт Microsoft: «Системный реестр - база данных операционной системы, в которой хранится информация о конфигурации компьютера. Реестр хранит сведения, к которым система обращается непрерывно во время работы ...»

От себя могу добавить следующее:

Реестр имеет иерархическую структуру, и делится на шесть ветвей:

HKEY_CLASSES_ROOT. Здесь содержится информация о зарегистрированных типах файлов, а также информация для OLE и операций drag-and-drop.

HKEY_CURRENT_USER. В этом разделе хранятся настройки цветов, заставок, рабочего стола и т.д.

HKEY_LOCAL_MACHINE. Здесь содержится информация о аппаратных и программных настройках .

HKEY_CURRENT_CONFIG. В этом разделе содержится информация, относящаяся к компьютеру: драйверы, установленное программное обеспечение и его настройки

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


Каждый, из перечисленных выше ветвей, содержит ключи (подразделы). А конечными элементами реестра являются параметры, в которых и хранится вся информация. Параметры реестра делятся на три типа:

1. строковые (напр. «Мой компьютер»)
2. двоичные (напр. 10 82 A0 8F). Максимальная длина такого ключа 16Кб
3. DWORD. Этот тип ключа занимает 4 байта и отображается в шестнадцатеричном и в десятичном виде (напр. 0x00000020 (32) - в скобках указано десятичное значение ключа).


Думаю, вы поняли, что такое реестр и для чего он нужен. Далее, вы научитесь с ним работать...


Работаем с реестром

Visual Basic умеет работать только с веткой HKEY_CURRENT_USER\ Software\VB and VBA Program Setting и только со строковыми ключами, но этого вполне достаточно, чтобы сохранять и считывать настройки своих программ:

Запись данных в реестр:
SaveSetting AppName, Section, Key, Setting '// AppName - название вашей программы,
Section - ключ, Key - имя параметра, Setting - строковое значение параметра


Чтение данных из реестра:
GetSetting AppName, Section, Key, Default '// AppName - название вашей программы,
Section - ключ, Key - имя параметра, Default - значение, которое будет возвращено функцией, если параметра не существует

Удаление данных из реестра:
DeleteSetting AppName, Section, Key '// AppName - название вашей программы,
Section - ключ, Key - имя параметра

Примичание: если вы хотите удалить подраздел целиком, то имя ключа указывать не нужно.

Получение всех имён и значений параметров заданного ключа:
GetAllSetting AppName, Section '// AppName - название вашей программы,
Section - ключ

Пример:

Dim intKeys As Integer, strKeys As Variant '// Объявляем переменные

strKeys = GetAllSettings("MyApp", "MySection") '// Используем функцию GetAllSettings

For intKeys = LBound(strKeys, 1) To UBound(strKeys, 1) '// Получаем границы массива ключей и выполняем цикл

Debug.Print strKeys(intKeys, 0), strKeys(intKeys, 1) '// Выводим результат

Next intKeys


Теперь вы знаете все функции, которые предоставляет VB для работы с реестром.
:xe

Добавлено через 1 минуту
И сравни со следующим:
WinAPI или VB?

Прочитав первую статью, вы узнали, что такое реестр и какие функции предоставляет Visual Basic для работы с ним. И вы уже знаете, что VB позволяет работать только веткой HKEY_CURRENT_USER\ Software\VB and VBA Program Setting и только со строковыми ключами. Чтобы работать с другими ветвями и типами ключей, можно воспользоваться функциями API.
Но помните, если ваша программа хранит и меняет в реестре только собственные настройки, то незачем использовать API, стандартных функций VB вам хватит вполне.

Средства WinAPI

WinAPI предоставляет очень большое количество функций для работы с реестром, поэтому будут рассмотрены только основные:

Константы, которые будут нужны:

Const REG_SZ As Long = 1
Const REG_DWORD As Long = 4

Const HKEY_CLASSES_ROOT = &H80000000
Const HKEY_CURRENT_USER = &H80000001
Const HKEY_LOCAL_MACHINE = &H80000002
Const HKEY_USERS = &H80000003
Const HKEY_CURRENT_CONFIG = &H80000005
Const HKEY_DYN_DATA = &H80000006

Const KEY_ALL_ACCESS = &H3F

Структуры:

Type SECURITY_ATTRIBUTES

nLength As Long
lpSecurityDescriptor As Long
bInheritHandle As Boolean

End Type

При использовании примеров из статьи, все перечисленные выше константы и структуры должны быть объявлены.


Операции с ключами:

RegOpenKeyEx - Функция открывает существующий ключ реестра, а точнее определяет его манипулятор.

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

Основные параметры:

hKey - имя стандартного ключа (например, HKEY_CLASSES_ROOT)
lpSubKey - имя открываемого ключа (например, "MyProgram\Options")
phkResult - заполняется манипулятором открытого ключа

Пример:

Dim Result As Long


RegOpenKeyEx HKEY_CLASSES_ROOT, "MyProgram\Options", 0, KEY_ALL_ACCESS, Result


MsgBox Result

'// В этом примере выводится манипулятор ключа HKEY_CLASSES_ROOT\MyProgram\Options

RegCloseKey - Функция закрывает ключ системного реестра.

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

Основные параметры:

hKey - манипулятор закрываемого ключа

Пример:

Dim Result As Long


RegOpenKeyEx HKEY_CLASSES_ROOT, "MyProgram\Options", 0, KEY_ALL_ACCESS, Result '// Открытие ключа
RegCloseKey Result '// Закрытие ключа

RegCreateKeyEx - Функция для создания нового ключа. Если ключ существует, функция открывает его.

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

Основные параметры:

hKey - имя стандартного ключа (например, HKEY_CLASSES_ROOT)
lpSubKey - имя создаваемого подключа (например, "MyProgram\Options")

Пример:

Dim SA As SECURITY_ATTRIBUTES
Dim Result As Long
RegCreateKeyEx HKEY_CURRENT_USER, "MyProgram\Options", 0, vbNullString, 0, KEY_ALL_ACCESS, SA, _ Result, &H1

RegDeleteKey - Функция удаляет указанный ключ

Declare Function RegDeleteKey Lib "advapi32.dll" Alias "RegDeleteKeyA" (ByVal hKey As Long, ByVal lpSubKey As String) As Long

Основные параметры:

hKey - имя стандартного ключа
lpSubKey - имя удаляемого подключа. В Win9x/Me все подключи указанного подключа также удаляются. В WinNT подключ не должен содержать других подключей.

Пример:

RegDeleteKey HKEY_CURRENT_USER, "MyProgram\Options"

Операции с параметрами:

RegSetValueEx - Функция задаёт значение и тип параметра, находящегося в заданном ключе.

Declare Function RegSetValueEx Lib "advapi32.dll" Alias "RegSetValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal Reserved As Long, ByVal dwType As Long, lpData As Any, ByVal cbData As Long) As Long


Основные параметры:

hKey - манипулятор ключа
lpValueName - имя параметра
dwType - тип ключа
lpData - новое значение

Пример:

Dim Result As Long
Dim Retval As Long

'// Находим манипулятор нужного ключа
Retval = RegOpenKeyEx(HKEY_CURRENT_USER, "MyProgram\Options", 0, KEY_ALL_ACCESS, Result)

'// Числовому параметру DWordValue присваивается значение 22
RegSetValueEx Result, "DWordValue", 0, REG_DWORD, 22, 4

'// Строковому параметру StringValue присваивается значение "Реестр"
RegSetValueEx Result, "StringValue", 0, REG_SZ, ByVal "Реестр", Len("Реестр")

RegCloseKey Result '// Закрытие ключа

RegDeleteValue - Функция удаляет заданный параметр


Declare Function RegDeleteValue Lib "advapi32.dll" Alias "RegDeleteValueA" (ByVal hKey As Long, ByVal lpValueName As String) As Long


Основные параметры:

hKey - манипулятор ключа
lpValueName - имя удаляемого параметра

Пример:


Dim Result As Long

'// Находим манипулятор нужного ключа
RegOpenKeyEx HKEY_CURRENT_USER, "MyProgram\Options", 0, KEY_ALL_ACCESS, Result

'// Удаляем параметр с именем StringValue
RegDeleteValue Result, "StringValue"

RegCloseKey Result '// Закрытие ключа

RegQueryValueEx - Функция считывает значения параметра

Declare Function RegQueryValueEx Lib "advapi32.dll" Alias "RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, lpType As Long, lpData As Any, lpcbData As Long) As Long

Основные параметры:

hKey - манипулятор ключа
lpValueName - имя читаемого параметра
lpData - заполняется значением заданного параметра

Пример:

Dim Result As Long
Dim DWResult As Long
Dim STResult As String

STResult = Space(255)

'// Находим манипулятор нужного ключа
RegOpenKeyEx HKEY_CURRENT_USER, "MyProgram\Options", 0, KEY_ALL_ACCESS, Result

'// Считываем значения числового параметра с именем DWordValue
RegQueryValueEx Result, "DWordValue", 0, 0, DWResult, 4

'// Считываем значения строкового параметра с именем StringValue
RegQueryValueEx Result, "StringValue", 0, 0, ByVal STResult, Len(STResult)

RegCloseKey Result '// Закрытие ключа

'// Выводим значение параметров

MsgBox DWResult '// Числовое
MsgBox STResult '// Строковое

Делай выводы...
__________________
Все великие люди мало жили. Вот и мне что-то нездоровится...
ErrorMs вне форума
 
Ответить с цитированием Вверх
Эти 4 пользователя(ей) сказали cпасибо за это полезное сообщение:
 
Время генерации страницы 0.02667 секунды с 10 запросами