Visual Basic и Системный Реестр Windows.
Системный
Реестр (Registry) Windows это база данных для хранения системной
и пользовательской информации в Windows. Системный Реестр состоит
из двух файлов – SYSTEM.DAT, в нем содержится информация о конкретном
компьторе, и USER.DAT, содержащий пользовательские установки и данные.
Для
работы с Системным Реестром обычно применяют специальный редактор Системного
Реестра – REGEDIT.EXE, или специальные функции Win32 API,
или некоторые встроенные функции и операторы Visual Basic.
Остановимся
на последнем и рассмотрим работу с данными в Системном Реестре с помощью
Visual Basic. Для этого Вам придется сделать следующее:
-
Запустите
редактор Системного Реестра, он находится в каталоге Windows – C:\Windows\Regedit.exe.
При запуске редактора в окне появятся шесть ключей-папок (эти ключи как
раз и представляют содержимое файлов SYSTEM.DAT и USER.DAT).
Выберите ключ HKEY_CURRENT_USER (этот ключ входит в состав файла
USER.DAT) и щелкните на плюсике "+". В раскрывшемся списке
выберите подключ - Software – и раскройте его. Найдите во вновь
открывшемся списке папку – VB and VBA Program Setting – это и есть
раздел Системного Реестра куда с помошью встроенных операторов и функций
Visual Basic Вы можете записывать и считывать необходимую Вам информацию.
-
Запустите
Visual Basic и откройте новый проект. Поместите на форму четыре
командные кнопки и в свойстве Caption" , каждой из них введите соответственно:
SaveSetting, GetSetting, GetAllSettings, DeleteSetting.
Запомните проект под именем, скажем, MYREG.
А
теперь приступим к работе.
Запись
значений с помощью оператора SaveSetting
Дважды
щелкните на командной кнопке SaveSetting и в раскрывшемся окне введите
следующий код:
Private
Sub Command1_Click()
SaveSetting
App.Title, "PortSettings", "Connect using", "COM1"
End
Sub
Запустите
программу на выполнение и нажмите на кнопку SaveSetting, потом переключитесь
на окно редактора Системного Реестра. Откройте папку VB and VBA Program
Setting и там Вы увидите вновь созданную папку MYREG, а в ней
подраздел с именем PortSettings. Открыв его, в левом окне редактора,
Вы прочтете запись которую только что создали - Connect using
"COM1".
***Если
Вы правильно выполнили все что написано, но ничего не увидели, не волнуйтесь.
Нажмите клавишу F5 (Refresh) и перед вами появится искомая запись.
Теперь
расмотрим по-подробнее, что Вы написали в окне кода. Синтаксис оператора
SaveSetting следующий:
SaveSetting
VBKeyName, Section, Key, Setting, где:
-
SaveSetting
– имя самого оператора;
-
VBKeyName
- строковое значение, которое является именем внутреннего подраздела VB
and VBA Program Setting. В нашем случае онo будет носить имя нашей
программы – MYREG, т.к. мы использовали свойство объекта App.Title;
-
Section
- строковое значение, которое является именем внутреннего подраздела VBKeyName.
В нашем случае оно носит имя PortSettings;
-
Key
- строковое значение, которое представляет имя параметра в созданном подразделе
PortSettings.В подразделе может быть много параметров.
-
Setting
- строковое значение, которое Вы хотите присвоить данному параметру. В
нашем случае параметру Connect using приваиваем значение COM1;
Чтение значений
с помощью функции GetSetting()
***При
выполнении нижеследующих действий объявите в разделе Declaration
формы переменные CrtMsg As String, MySet As Variant
Чтобы
получить значение определенного параметра, нужно использовать функцию GetSetting().Дважды
щелкните на командной кнопке GetSetting и в раскрывшемся окне введите
следующий код:
Private
Sub Command2_Click()
MySet
= GetSetting(App.Title, "PortSettings", "Connect using", CrtMsg)
Debug.Print
MySet
End
Sub
Запустите
программу на выполнение и намите на кнопку GetSetting. В окне Immediate
Вы увидете введенное ранее (оператором SaveSetting) значение – COM1.
Теперь
расмотрим подробнее, что Вы написали в окне кода. Синтаксис оператора GetSetting
следующий:
MySet
= GetSetting ( VBKeyName, Section, Key [, Default ] )
-
MySet
- строка для хранения возвращаемого функцией GetSetting значения;
-
GetSetting
– имя самой функции;
-
VBKeyName
- строковое значение, которое является именем внутреннего подраздела VB
and VBA Program Setting. Мы используем свойство объекта App.Title,
т.к. хотим прочесть информацию из созданного нашей программой раздела ;
-
Section
- строковое значение, которое является именем внутреннего подраздела VBKeyName.
В нашем случае он носит имя PortSettings;
-
Key
- строковое значение, которое представляет имя параметра в созданном подразделе
PortSettings.В подразделе может быть много параметров и по-этому,
мы указываем на желаемое - Connect using;
Default
- необязательный аргумент, представляющий строковое значение, которое будет
возвращено функцией в случае ошибки (если такого параметра нет). Функция
возвращает строковое значение, присвоенное аргументу Default. К
примеру CrtMsg = "Такого параметра не существует.".
Чтение значений
с помощью функции GetAllSettings()
***Предварительно
добавте следующий код к имеющемуся коду командной кнопки
SaveSetting:
SaveSetting
App.Title, "PortSettings", "Data bits", "8"
SaveSetting
App.Title, "PortSettings", "Parity", "None"
SaveSetting
App.Title, "PortSettings", "Stop bits", "1"
SaveSetting
App.Title, "PortSettings", "Flow control", "None"
Произведите
операцию записи данных в Системный Реестр.
Для
получения из реестра массива, содержащего все значения параметров из определенного
подраздела (например, PortSettings) применяется функция GetAllSettings().
Для этого дважды щелкните на командной кнопке GetAllSettings и в
раскрывшемся окне введите следующий код:
Private
Sub Command3_Click()
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
Запустите
программу на выполнение и нажмите на кнопку GetAllSettings. В окне
Immediate Вы увидете введенные ранее (оператором SaveSetting)
значения:
Connect
using COM1
Bits
per second 2400
Data
bits 8
Parity
None
Stop
bits 1
Flow
control None
Теперь
расмотрим подробнее, что Вы написали в окне кода. Синтаксис оператора GetAllSetting
следующий:
MySet
= GetAllSettings ( VBKeyName, Section)
-
MySet
- возвращаемый функцией массив значений, он должен быть типа Variant
-
GetSetting
– имя самой функции;
-
VBKeyName
- строковое значение, которое является именем внутреннего подраздела VB
and VBA Program Setting. Мы используем свойство объекта App.Title,
т.к. хотим прочесть информацию из созданного нашей программой раздела ;
-
Section
- строковое значение, которое является именем внутреннего подраздела VBKeyName.
В нашем случае он носит имя PortSettings;
Остальные
операторы помогают обработать массив значений и получить информацию в удобном
виде.
Удаление
раздела параметров с помощью оператора DeleteSetting
Вы
уже создали целый массив параметров! А что делать если он больше ненужен?
Для удаления параметров применяется оператор DeleteSetting. Дважды
щелкните на командной кнопке DeleteSetting и в раскрывшемся окне
введите следующий код:
Private
Sub Command4_Click()
DeleteSetting
App.Title,"PortSettings", "Flow control "
End
Sub
Запустите
программу на выполнение и намите на кнопку DeleteSetting, потом
переключитесь на окно редактора Системного Реестра и Вы увидете, что параметр
Flow control отсутствует.
***Если
Вы правильно выполнили все что написано, но ничего не увидели, не волнуйтесь.
Нажмите на клавишу F5 - Refresh.
Теперь
расмотрим подробнее, что Вы написали в окне кода. Синтаксис оператора DeleteSetting
следующий:
DeleteSetting
VBKeyName, Section, Key , где:
-
DeleteSetting
- имя самого оператора;
-
VBKeyName
- строковое значение, которое является именем внутреннего подраздела VB
and VBA Program Setting. Мы используем свойство объекта App.Title,
т.к. хотим удалить информацию из созданного нашей программой
раздела ;
-
Section
- строковое значение, которое является именем внутреннего подраздела VBKeyName.
В нашем случае он носит имя PortSettings;
-
Key
- строковое значение, которое представляет имя параметра в подразделе PortSettings.В
подразделе может быть много параметров и по-этому, мы указываем на желаемое
– Flow control;
Если
Вы захотите удалить сразу весь подраздел, а не некоторые параметры, то
для этого используйте следующий синтаксис оператора DeleteSetting:
DeleteSetting
VBKeyName, Section ;
Поместив
код DeleteSetting App.Title,"PortSettings" в Private
Sub Command4_Click(), Вы удалите весь подраздел
PortSettings.
А
если Вы захотите убрать вообще все Ваши установки из Сиастемного Реестра,
то воспользуйтесь следующим кодом:
Private
Sub Command4_Click()
DeleteSetting
App.Title
End
Sub
***Внимание!!!
Пользуйтесь оператором DeleteSetting очень осторожно!
|