Вообще, в результате политики умолчания Микрософт вокруг этой части
системы сложился эдакий ореол таинственности. По большому счету, это
может быть оправдано для конечного пользователя.
Но совсем негоже ничего не знать о регистри программисту. Даже если
это програмист на VB. Oднако я не собираюсь писать опус о регистри вообще
и о ее частях и настройках. Это определенно выходит за рамки данной
рассылки.
Итак, начальная и необходимая информация о регистри такова :
ЧТО ЖЕ ЭТО ТАКОЕ?
Регистри является своеобразной базой данных. В частнности, в ней хранится
информация о настройке системе, о железе, о программах, установленных
на компьютере. Там же можно найти ID для всех зарегистрированных OLE
компонентов. И не только ID .
Как и полагается базе данных - информация в ней структуризована .Т.е.
не валяется как попало - а лежит в стого заданном месте и определенной
"последовательности". Так, открыв регистри редактором реестра
- он называется regedit.exe ( с этого момента мы с вами договариваемся,
что бездумные изменения в реестре действительно могут привести к краху
системы. Так что, если вы собираетесь что-то изменить, удалить или добавить
ручками в реестр - вы должны быть уверены, что вы не делаете ничего
деструктивного) вы увидите список папок
- HKEY_CLASSES_ROOT
- HKEY_LOCAL_MACHINE
- HKEY_CURRENT_USER
и так далее.
Нас, в первую очередь, интересуют ветвь LOCAL_MACHINE и ветвь CURRENT_USER
Ветки легко отрываются в дерево каталогов. Вот например HKEY_CURRENT_USER\Software\VB
and VBA Program Settings Это фолдер, который содержит группы
настроек, писать в которые и читать можно прямо из VB функциями SaveSettig
, GetSetting
напишите и выполните в VB строку :
SaveSetting "APP_TEST", "TEST_Section", "Test_Key",
"Test_Value"
После этого открыв реестр в указанной выше ветке вы увидите: HKEY_CURRENT_USER\Software\VB
and VBA Program Settings\APP_TEST\TEST_Section
в котором будет ключ "Test_Key", имеющий значение "Test_Value"
Cоотвественно легко прочесть это значение командой
debug.print Getsetting ("APP_TEST", "TEST_Section",
"Test_Key", "Default Value")
Обратите внимание на последний параметр. Если указанный ключ не найден
- то функция Getsetting вернет именно его - "Default Value"
Ни к каким другим ветвям регистри вы не можете добраться просто из кода
VB Видимо из соображений безопасности.
Теперь, позвольте сказать пару слов о самих ветках. Наиболее важным
для вас является информация о том, что ветвь HKEY_LOCAL_MACHINE имеет
отношение к машине в целом, в том числе там хранится информация о программах,
которые будут видны из любого пользовательского акаунта (актуально большей
частью под NT)
В то же время под HKEY_CURRENT_USER хранится информацио доступная конкретному
юзеру. Кстати, VB пишет именно туда. Т.е два разных пользователя имеют
на одном компьютере собственные настройки. И это правильно. Видите разницу
между ini файлом и реетром - в ini (если специально не позаботится об
обратном) настройки будут одинаковы для любых пользователей
Следует иметь в виду, что рядовой пользователь (точнее акаунт)работающий
под NT не имеет возможности писать и изменять информацию в ветви HKEY_LOCAL_MACHINE
. Точнее это может быть так или не так в зависимости от настроек. Акаунт
Администратора может делать то в любом случае.
Итак, мы с вами выросли из детских штанишек функций SaveSettig , GetSetting
, и теперь хотим сохранять значнения в любом месте реестра. Что же -
это вполне возможно. (в пределах разренной активности для конкретного
пользовательского акаунта) Уже давно - думаю с год, на моем сайте лежит
пример того, как оперировать данными реестра http://www.vbrussian.com/Files/registry.zip
Берите и распаковывайте.
Внутри модуль и форма. Ядро - это конечно модуль в нем вы найдете все
необходимые функции для работы с реестром, и констранты. Опять таки,
как и в случае с ini файлами - не уверен, что надо отягащать вас знаниями,
как конкретно это работает. Если вы уже обладаете знаниями, досточными,
чтобы в этом разобраться - то код - вон он. Если же вы новичек в VB,
то я буду впустую тратить время и бумагу на непонятные вам обьяснения.
Не обижайтесь это действительно так - VB, это язык для быстрого построения
графического интерфейса, и создания приложений для работы с базами,
интергации с MS Office итд. Не спорю, можно и на нем творить чудеса.
Я преклоняюсь перед Аркадием Оловянниковым, который ухитряется делать
такое... ( смотри разделы Примеры и Программы моего сайта), но в то
же время это скорее удел одиночных профессионалов, чем общепринятый
путь.
Итак, вернемся к примеру. Рассмотрим просто как вызвать функции для
чтения строки и для записи строки в реестр. Чтение строки вызывается
так:
strString = getstring(HKEY_CURRENT_USER, "Software\VBW\Registry",
"String")
Где :
HKEY_CURRENT_USER - это константа, обьявленная
в модуле (long), которая ссылается на ветвь реестра HKEY_CURRENT_USER
. Для остальных ветвей константы обьявлены там же;
"Software\VBW\Registry" - эта строка описывает
полный путь к ключу;
"String" - это имя ключа.
Если вы выплните функцию VB
SaveSetting "APP_TEST", "TEST_Section", "Test_Key",
"Test_Value"
(помните, мы разбирали этот пример выше?), то прочесть эти значения
с помошью моего модуля можно будет так:
strString = getstring(HKEY_CURRENT_USER, _ "Software\VB
and VBA Program Settings\APP_TEST\TEST_Section", _ "Test_Key")
при этом strString получит значение "Test_Value" Записать строку
в реестр можно таким образом
Call savestring(HKEY_CURRENT_USER, "Software\VBW\Registry",
_ "String", "Any String for Write")
Где :
HKEY_CURRENT_USER - это константа, обьявленная
в модуле (long), которая ссылается на ветвь реестра HKEY_CURRENT_USER
. Для остальных ветвей константы обьявлены там же;
"Software\VBW\Registry" - эта строка описывает
полный путь к ключу;
"String" - это имя ключа;
"Any String for Write" - любое текстовое
значение.
Продублировать указанный выше вызов функции VB можно так savestring(HKEY_CURRENT_USER,
_ "Software\VB and VBA Program Settings\APP_TEST\TEST_Section", _ "Test_Key",
"Test_Value" )
Остальные функции вызываются аналогично. Не думаю, что у вас возникнут
проблемы. Да, чуть не забыл Программы или ярлыки на программы , помещенные
в
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run]
выполняться при старте виндов, сразу после закрузки. При этом
они не маячат в фолдере Sturtup
Ну, а напоследок ,пара рассылок, которая, по моему мнению вам может
пригодится: