Добрый день, 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.