Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Служба Рассылок Городского Кота


Служба Рассылок Городского Кота
VB Хитрости - советы и ответы на вопросы

 

Пришло обещанное время разговора о регистри.

Вообще, в результате политики умолчания Микрософт вокруг этой части системы сложился эдакий ореол таинственности. По большому счету, это может быть оправдано для конечного пользователя.
Но совсем негоже ничего не знать о регистри программисту. Даже если это програмист на 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


Ну, а напоследок ,пара рассылок, которая, по моему мнению вам может пригодится:

Надоело искать нужную информацию? Подписывайся!
Рассылка посвящена компьютерной документации. В ней Вы найдете обзоры сайтов по тематике рассылки и анонсы новых поступлений на них, новости СМИ и печатных изданий, анонсы on-line интернет-изданий,
а также обзоры новинок на сайте "Архив Компьютерной Документации" http://document.newmail.ru/
Компьютерная документация -новости и обзоры

"Русские документы" - самые свежие компьютерные статьи

Еженедельные анонсы компьютерных статей, появившихся на сайте "Русские документы"
Вся самая интересная информация: от программирования и хитростях операционных систем до безопасности и программных руководств. И все это - на русском языке !

Подписаться:

 

Успехов в программировании!

Борис Рудой

Автор сайта - Visual Basic на русском



http://subscribe.ru/
E-mail: ask@subscribe.ru

В избранное