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

RusFAQ.ru: Программирование на Basic / VBA


Информационный Канал Subscribe.Ru

RusFAQ.ru: Программирование на Basic / VBA

Выпуск № 118
от 26.07.2004, 11:50

Администратор:
Имя: Калашников О.А.
URL: Информационный ресурс
ICQ: 68951340
Россия, Москва
О рассылке:
Задано вопросов: 259
Отправлено ответов: 207
Активность: 79.92 %
[Задать вопрос >>][Регистрация эксперта >>]
[Поиск в базе][Обсудить на форуме]


 Список экспертов, ответы которых опубликованы в данном выпуске

Licvidator
Статус: Профессиональный
Общий рейтинг: 106.54
URL: PC Info
[Подробней >>]
Dorian
Статус: Начальный
Общий рейтинг: 116.66
[Подробней >>]
PavPS
Статус: Начальный
Общий рейтинг: 124
[Подробней >>]
 
Горячев Игорь
Статус: Доверительный
Общий рейтинг: 117.44
[Подробней >>]


 Краткий перечень вопросов

Вопрос № 259. Как в VB работать с реестром?... (ответов: 4)

Вопросов: 1, ответов: 4


 Вопрос № 259

Как в VB работать с реестром?



Вопрос отправлен: 23.07.2004, 11:41
Отправитель: Geograph

[Следующий вопрос >>] [Список вопросов]

Отвечает Licvidator

Добрый день, Geograph!
http://vb.hut.ru/win32api/registry.htm.
Набрав в Google "работа с реестром Visual Basic" (без кавычек) Вы получите куда более обширный список ссылок.

Ответ отправлен: 23.07.2004, 12:31
Отправитель: Licvidator


Отвечает Dorian

Доброе время суток, Geograph!
Сам VB может работать с реестром только в разделе HKEY_CURRENT_USERSoftwareVB and VBA Programms, и способны только читать и записывать.
Вся остальна я работа с реестром через VB осуществяется через API
В качестве примера, создадим класс, для работы с реестром через Windows API. Этот класс может работать только со строковыми данными. Я посчитал, что если тебе понадобится больше, ты сможешь это сделать сами. Кроме того класс даёт возможность удалять лишние разделы, и параметры. Остальные операции будут заключены в другой класс, который должен будет реализовать все возможности Windows API в работе с реестром.
Создадай новый модуль класса и назовём его RegistryExClass. После этого приступим к объявлению необходимых функций. Я рассмотрю только особенные, остальные найдёте в API Text Viewer. (RegOpenKey, RegDeleteValue, RegDeleteKey, RegCloseKey, RegCreateKey)
Private Declare Function RegQueryValueExS 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
Private Declare Function RegSetValueExS Lib "advapi32.dll" _
Alias "RegSetValueExA" ( _
ByVal hkey As Long, _
ByVal lpValueName As String, _
ByVal Reserved As Long, _
ByVal dwType As Long, _
ByVal lpData As String, _
ByVal cbData As Long) As Long
'Объявив эти константы таким способом, ты дашь
'пользователю класса возможность выбирать из списка
'значение параметра
Public Enum HKEY_CONSTANTS
HKEY_CLASSES_ROOT = &H80000000
HKEY_CURRENT_CONFIG = &H80000005
HKEY_CURRENT_USER = &H80000001
HKEY_DYN_DATA = &H80000006
HKEY_LOCAL_MACHINE = &H80000002
HKEY_PERFORMANCE_DATA = &H80000004
HKEY_USERS = &H80000003
End Enum
'Ну ещё константа, для строкового типа
Private Const REG_SZ = 1
Теперь создадим методы для чтения/записи параметров
'~~~~~~.GetString Функция
Public Function GetString( _
ByVal HomeKey As HKEY_CONSTANTS, _
ByVal KeyName As String, _
ByVal ValueName As String) As String
'Handle раздела реестра
Dim hkey As Long
'переменная для хранения значения
Dim sData As String
'Результат работы API функций
Dim lres As Long
'Тип возвращаемого значения
Dim lDataType As Long
'переменная для хранения длины строки
Dim lDlen As Long
'Открываем Раздел
lres = RegOpenKey(HomeKey, KeyName, hkey)
'Если вернулся не ноль - ошибка, выходим
If lres <> 0 Then GetRegString = vbNullString: Exit Function
'Продолжаем, заполняем строку пробелами.
sData = String$(64, 32) & Chr$(0)
lDlen = Len(sData)
'Читаем значение
lres = RegQueryValueExS(hkey, ValueName, 0, lDataType, sData, lDlen)
'опять проверка на ошибку
If lres <> 0 Then GetRegString = vbNullString: Exit Function
'проверяем тип полученных данных
If lDataType = REG_SZ Then
GetString = Left$(sData, lDlen - 1)
Else
GetString = vbNullString
End If
'и закрываем раздел
lres = RegCloseKey(hkey)
End Function

'~~~~~.SaveString Метод
Public Sub SaveString( _
ByVal HomeKey As HKEY_CONSTANTS, _
ByVal KeyName As String, _
ByVal ValueName As String, _
ByVal Data As String)
'Handle для корневого раздела
Dim hkey As Long
'Handle для изменяемого раздела
Dim hSubKey As Long
'Результат работы функции
Dim lres As Long
'Открываем корневой раздел
lres = RegOpenKey(HomeKey, vbNullString, hkey)
'Создаём(если есть открываем) нужный раздел
lres = RegCreateKey(HomeKey, KeyName, hSubKey)
'Пишем данные
lres = RegSetValueExS(hSubKey, ValueName, 0, _
REG_SZ, Data + Chr$(0), Len(Data) + 1)
'и закрываем всё открытое
lres = RegCloseKey(hSubKey)
lres = RegCloseKey(hkey)
End Sub
Метод GetString всего лишь читает параметр из реестра. SaveString - имеет больше возможностей. С его помощью ты можете создать пустой раздел. Для этого вызови его, установив значение ValueName и Data равное пустой строке. Если хочешь установить для раздела значение по умолчанию присвойте Data нужное значение, при нулевом(vbNullString) ValueName.
Теперь удаление.
'~~~~~~.DeleteValue Метод
Public Sub DeleteValue( _
ByVal HomeKey As HKEY_CONSTANTS, _
ByVal KeyName As String, _
ByVal ValueName As String)
'Handle для изменяемого раздела
Dim hkey As Long
'Результат API функции
Dim lres As Long
'открываем нужные раздел
lres = RegOpenKey(HomeKey, KeyName, hkey)
'проверяем на ошибку
If lres <> 0 Then Exit Sub
'удаляем параметр
lres = RegDeleteValue(hkey, ValueName)
'закрываем
lres = RegCloseKey(hkey)
End Sub
'~~~~~~.DeleteKey
Public Sub DeleteKey( _
ByVal HomeKey As HKEY_CONSTANTS, _
ByVal KeyName As String)
'результат APi функции
Dim lres As Long
'Удаляем раздел из корневого
lres = RegDeleteKey(HomeKey, KeyName)
End Sub
Весь код я скопировал из VB исходника, так что там все
работает
Пока!



Ответ отправлен: 23.07.2004, 12:12
Отправитель: Dorian


Отвечает PavPS

Доброе время суток, Geograph!
Этим в user mode в основном занимается Advapi.dll
RegCloseKey Releases a handle to the specified registry key.
RegConnectRegistry Establishes a connection to a predefined registry handle on another computer.
RegCreateKeyEx Creates the specified registry key.
RegDeleteKey Deletes a subkey.
RegDeleteValue Removes a named value from the specified registry key.
RegDisablePredefinedCache Disables the predefined registry handle table of HKEY_CURRENT_USER for the specified process.
RegEnumKeyEx Enumerates subkeys of the specified open registry key.
RegEnumValue Enumerates the values for the specified open registry key.
RegFlushKey Writes all the attributes of the specified open registry key into the registry.
RegGetKeySecurity Retrieves a copy of the security descriptor protecting the specified open registry key.
RegLoadKey Creates a subkey under HKEY_USERS or HKEY_LOCAL_MACHINE and stores registration information from a specified file into that subkey.
RegNotifyChangeKeyValue Notifies the caller about changes to the attributes or contents of a specified registry key.
RegOpenCurrentUser Retrieves a handle to the HKEY_CURRENT_USER key for the user the current thread is impersonating.
RegOpenKeyEx Opens the specified registry key.
RegOpenUserClassesRoot Retrieves a handle to the HKEY_CLASSES_ROOT key for the specified user.
RegOverridePredefKey Maps a predefined registry key to a specified registry key.
RegQueryInfoKey Retrieves information about the specified registry key.
RegQueryMultipleValues Retrieves the type and data for a list of value names associated with an open registry key.
RegQueryValueEx Retrieves the type and data for a specified value name associated with an open registry key.
RegReplaceKey Replaces the file backing a registry key and all its subkeys with another file.
RegRestoreKey Reads the registry information in a specified file and copies it over the specified key.
RegSaveKey Saves the specified key and all of its subkeys and values to a new file.
RegSetKeySecurity Sets the security of an open registry key.
RegSetValueEx Sets the data and type of a specified value under a registry key.
RegUnLoadKey Unloads the specified registry key and its subkeys from the registry.


Ответ отправлен: 23.07.2004, 23:06
Отправитель: PavPS


Отвечает Горячев Игорь

Добрый день, Geograph!
Проще всего через функции WinAPI. Но можно и стандартными функциями VB: GetSetting, SaveSetting, DeleteSetting, GetAllSetting - но они работают только со строковыми данными.

Ответ отправлен: 24.07.2004, 00:10
Отправитель: Горячев Игорь



Форма отправки вопроса

Внимание!
Мы рекомендуем открывать рассылку в программе Internet Explorer 5.0+ или отправлять вопросы с сайта по адресу: http://rusfaq.ru/cgi-bin/Message.cgi.

(C) 2002-2003 Команда RusFAQ.ru.

 Персональные данные

Ваше имя:

Ваш e-mail:

Опубликовать мой e-mail в рассылке


 Вопрос и дополнение

Ваш вопрос:


Приложение (если необходимо):


Получить ответов:


 Выбор рассылки

Программисту
Assembler (25)
C / C++ (13)
Perl (4)
Builder / Delphi (17)
Pascal (24)
Basic / VBA (7)
Java / JavaScript (5)
PHP (16)
Криптография (10)
WinAPI (11)
Радиоэлектроника (8)
Пользователю
Windows 95/98/Me (45)
Windows NT/2000/XP (58)
"Железо" (43)
Поиск информации (16)
Администратору
Windows NT/2000/XP (37)
Linux / Unix (19)
Юристу
Гражданское право (12)
Семейное право (9)
Трудовое право (9)
КоАП (7)

Отправить вопрос всем экспертам выбранной рассылки.




Задать вопрос | Регистрация эксперта | Поиск в базе | Чат | Форумы | Новости
Проект экспертов RusFAQ.ru | Фотоальбом | Virus.RusFAQ.ru | Администрирование
Профессиональная WEB-Студия B.I.T.


Яндекс цитирования
Rambler's TopShop Rambler's Top100
© 2001-2004 Россия, Москва. Авторское право: Калашников О.А.

http://subscribe.ru/
E-mail: ask@subscribe.ru
Адрес подписки
Отписаться

В избранное