Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.88/8: Рейтинг темы: голосов - 8, средняя оценка - 4.88
 Аватар для Otwet
2 / 2 / 3
Регистрация: 13.05.2014
Сообщений: 29

Как создать ключ в реестре типа REG_EXPAND_SZ?

11.06.2014, 10:35. Показов 1619. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть у меня старый модуль:

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
Public Const REG_SZ As Long = 1
Public Const REG_DWORD As Long = 4
Public Const HKEY_LOCAL_MACHINE = &H80000002
Public Const HKEY_CLASSES_ROOT = &H80000000
Public Const HKEY_CURRENT_USER = &H80000001
Public Const HKEY_USERS = &H80000003
 
 
Public Const ERROR_NONE = 0
Public Const ERROR_BADDB = 1
Public Const ERROR_BADKEY = 2
Public Const ERROR_CANTOPEN = 3
Public Const ERROR_CANTREAD = 4
Public Const ERROR_CANTWRITE = 5
Public Const ERROR_OUTOFMEMORY = 6
Public Const ERROR_INVALID_PARAMETER = 7
Public Const ERROR_ACCESS_DENIED = 8
Public Const ERROR_INVALID_PARAMETERS = 87
Public Const ERROR_NO_MORE_ITEMS = 259
Public Const KEY_ALL_ACCESS = &H3F
Public Const REG_OPTION_NON_VOLATILE = 0
 
Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long
Declare Function RegCreateKeyEx Lib "advapi32.dll" Alias "RegCreateKeyExA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal RESERVED As Long, ByVal lpClass As String, ByVal dwOptions As Long, ByVal samDesired As Long, ByVal lpSecurityAttributes As Long, phkResult As Long, lpdwDisposition As Long) As Long
Declare Function RegOpenKeyEx Lib "advapi32.dll" Alias "RegOpenKeyExA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal ulOptions As Long, ByVal samDesired As Long, phkResult As Long) As Long
Declare Function RegQueryValueExString 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
Declare Function RegQueryValueExLong Lib "advapi32.dll" Alias "RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, lpType As Long, lpData As Long, lpcbData As Long) As Long
Declare Function RegQueryValueExNULL Lib "advapi32.dll" Alias "RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, lpType As Long, ByVal lpData As Long, lpcbData As Long) As Long
Declare Function RegSetValueExString Lib "advapi32.dll" Alias "RegSetValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal RESERVED As Long, ByVal dwType As Long, ByVal lpValue As String, ByVal cbData As Long) As Long
Declare Function RegSetValueExLong Lib "advapi32.dll" Alias "RegSetValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal RESERVED As Long, ByVal dwType As Long, lpValue As Long, ByVal cbData As Long) As Long
Declare Function RegDeleteKey& Lib "advapi32.dll" Alias "RegDeleteKeyA" (ByVal hKey As Long, ByVal lpSubKey As String)
Declare Function RegDeleteValue& Lib "advapi32.dll" Alias "RegDeleteValueA" (ByVal hKey As Long, ByVal lpValueName As String) 'Ñîçäàíèå íîâîãî êëþ÷à
Public Function CreateNewKey(lPredefinedKey As Long, sNewKeyName As String)
Dim hNewKey As Long
Dim lRetVal As Long
lRetVal = RegCreateKeyEx(lPredefinedKey, sNewKeyName, 0&, vbNullString, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, 0&, hNewKey, lRetVal)
RegCloseKey (hNewKey)
End Function
 
'Çàïèñü äàííûõ â êëþ÷
Public Function SetKeyValue(lPredefinedKey As Long, sKeyName As String, sValueName As String, vValueSetting As Variant, lValueType As Long)
Dim lRetVal As Long
Dim hKey As Long
 
 
lRetVal = RegOpenKeyEx(lPredefinedKey, sKeyName, 0, KEY_ALL_ACCESS, hKey)
lRetVal = SetValueEx(hKey, sValueName, lValueType, vValueSetting)
 
RegCloseKey (hKey)
End Function
 
Public Function SetValueEx(ByVal hKey As Long, sValueName As String, lType As Long, vValue As Variant) As Long
 
Dim lValue As Long
Dim sValue As String
 
Select Case lType
Case REG_SZ
sValue = vValue
SetValueEx = RegSetValueExString(hKey, sValueName, 0&, lType, sValue, Len(sValue))
Case REG_DWORD
lValue = vValue
SetValueEx = RegSetValueExLong(hKey, sValueName, 0&, lType, lValue, 4)
End Select
 
End Function
 
'Âîçâðàùàåò çíà÷åíèÿ çàïèñàííûå â êëþ÷å(ò.å. ÷òåíèå)
Public Function QueryValue(lPredefinedKey As Long, sKeyName As String, sValueName As String)
 
Dim lRetVal As Long
Dim hKey As Long
Dim vValue As Variant
lRetVal = RegOpenKeyEx(lPredefinedKey, sKeyName, 0, KEY_ALL_ACCESS, hKey)
lRetVal = QueryValueEx(hKey, sValueName, vValue)
QueryValue = vValue
RegCloseKey (hKey)
 
End Function
 
Function QueryValueEx(ByVal lhKey As Long, ByVal szValueName As String, vValue As Variant) As Long
 
Dim cch As Long
Dim lrc As Long
Dim lType As Long
Dim lValue As Long
Dim sValue As String
 
On Error GoTo QueryValueExError
 
'Îïðåäåëåíèå ðàçìåðà è òèïà ñ÷èòûâàåìûõ äàííûõ
lrc = RegQueryValueExNULL(lhKey, szValueName, 0&, lType, 0&, cch)
If lrc <> ERROR_NONE Then MsgBox "Äàííûõ (êëþ÷à) íå ñóùåñòâóåò!", vbExclamation, Form1.Caption
Select Case lType
'Äëÿ ñèìâîëüíûõ
Case REG_SZ:
sValue = String(cch, 0)
lrc = RegQueryValueExString(lhKey, szValueName, 0&, lType, sValue, cch)
If lrc = ERROR_NONE Then
vValue = Left$(sValue, cch)
Else
vValue = Empty
End If
'Äëÿ ÷èñëîâûõ
Case REG_DWORD:
lrc = RegQueryValueExLong(lhKey, szValueName, 0&, lType, lValue, cch)
If lrc = ERROR_NONE Then vValue = lValue
'Äëÿ îñòàëüíûõ íå ïîääåðæàííûõ òèïîâ äàííûõ
Case Else
lrc = -1
End Select
QueryValueExExit:
QueryValueEx = lrc
Exit Function
QueryValueExError:
Resume QueryValueExExit
End Function
 
Public Function DeleteValue(lPredefinedKey As Long, sKeyName As String, sValueName As String)
Dim lRetVal As Long
Dim hKey As Long
lRetVal = RegOpenKeyEx(lPredefinedKey, sKeyName, 0, KEY_ALL_ACCESS, hKey)
lRetVal = RegDeleteValue(hKey, sValueName)
RegCloseKey (hKey)
End Function
 
'Óäàëåíèå êëþ÷à
Public Function DeleteKey(lPredefinedKey As Long, sKeyName As String)
Dim lRetVal As Long
lRetVal = RegDeleteKey(lPredefinedKey, sKeyName)
End Function
Вызываю так:

Visual Basic
1
SetKeyValue HKEY_LOCAL_MACHINE, "Mykey", "MykeyName", "MykeyValue", REG_EXPAND_SZ
Но ничего не создается! :(

P.S. Я не настолько глуп, чтобы создавать ключ "Mykey/MykeyName" :)

Добавлено через 19 минут
И тишина...
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
11.06.2014, 10:35
Ответы с готовыми решениями:

Как удалить или изменить ключ в реестре?
Savesetting, getsetting, deletesetting работают с веткой VB. А к остальным веткам как поиметь доступ? И можно-ли программно назначить...

Как получить и изменить в реестре значение типа REG_MULTI_SZ
Находил примеры с работой с ключами, чтением и записи DWORD и STRING из реестра, но нужно прочесть значение типа REG_MULTI_SZ - как?

Как создать ключ в реестре?
Знаю, что читать ключ из реестра можно например так: Set myWS = CreateObject(&quot;WScript.Shell&quot;) Sep =...

6
 Аватар для Апострофф
9908 / 3924 / 742
Регистрация: 11.10.2011
Сообщений: 5,904
11.06.2014, 10:52
Цитата Сообщение от Otwet Посмотреть сообщение
REG_EXPAND_SZ
-это что (где и как описано)?
0
 Аватар для Otwet
2 / 2 / 3
Регистрация: 13.05.2014
Сообщений: 29
11.06.2014, 11:20  [ТС]
Цитата Сообщение от Апострофф Посмотреть сообщение
-это что (где и как описано)?
Visual Basic
1
Const REG_EXPAND_SZ = 2
Не все скопировал

Добавлено через 20 минут
Апострофф, Так в чем ошибка?
0
 Аватар для Апострофф
9908 / 3924 / 742
Регистрация: 11.10.2011
Сообщений: 5,904
11.06.2014, 11:29
Лучший ответ Сообщение было отмечено Otwet как решение

Решение

Visual Basic
1
2
3
4
5
6
7
8
9
10
Public Function SetKeyValue(lPredefinedKey As Long, sKeyName As String, sValueName As String, vValueSetting As Variant, lValueType As Long)
Dim lRetVal As Long
Dim hKey As Long
 
STOP 'и анализируй по шагам (F8) возвращаемые результаты в lRetVal
lRetVal = RegOpenKeyEx(lPredefinedKey, sKeyName, 0, KEY_ALL_ACCESS, hKey)
lRetVal = SetValueEx(hKey, sValueName, lValueType, vValueSetting)
 
lRetVal = RegCloseKey (hKey)
End Function
2
 Аватар для Otwet
2 / 2 / 3
Регистрация: 13.05.2014
Сообщений: 29
11.06.2014, 12:57  [ТС]
Цитата Сообщение от Апострофф Посмотреть сообщение
анализируй по шагам (F8) возвращаемые результаты в lRetVal

Попробую, спасибо!

Добавлено через 2 минуты
Цитата Сообщение от Апострофф Посмотреть сообщение
анализируй по шагам (F8) возвращаемые результаты в lRetVal
Всегда возвращает нуль.

Добавлено через 1 час 21 минуту
Апострофф, Ничего не удалось, но спасибо за старание.
0
Модератор
10048 / 3894 / 883
Регистрация: 22.02.2013
Сообщений: 5,847
Записей в блоге: 79
11.06.2014, 14:14
Лучший ответ Сообщение было отмечено Otwet как решение

Решение

Цитата Сообщение от Otwet Посмотреть сообщение
Всегда возвращает нуль.
Это признак успешного завершения.
1
 Аватар для Otwet
2 / 2 / 3
Регистрация: 13.05.2014
Сообщений: 29
11.06.2014, 15:51  [ТС]
Цитата Сообщение от The trick Посмотреть сообщение
Это признак успешного завершения.
Однако не записывает Сам попробуй. И скажи в чем дело и как надо.

Добавлено через 22 минуты
The trick, СПАСИБО! Решил так:

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Public Function SetValueEx(ByVal hKey As Long, sValueName As String, lType As Long, vValue As Variant) As String
 
Dim lValue As Long
Dim sValue As String
 
Select Case lType
Case REG_SZ
sValue = vValue
SetValueEx = RegSetValueExString(hKey, sValueName, 0&, lType, sValue, Len(sValue))
Case REG_DWORD
lValue = vValue
SetValueEx = RegSetValueExLong(hKey, sValueName, 0&, lType, lValue, 4)
Case REG_EXPAND_SZ
sValue = vValue
SetValueEx = RegSetValueExString(hKey, sValueName, 0&, lType, vValue, Len(vValue))
End Select
 
End Function
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
11.06.2014, 15:51
Помогаю со студенческими работами здесь

Создать ключ в реестре - System.UnauthorizedAccessException
Вот такой нехитрый код. using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using...

Ключ в реестре
Хотел спросить. Как можно создать и прочитать данные из реестра типа DWORD. Я могу делать как Строковой параметр. Но что то с DWORD у меня...

Переименовать ключ в реестре
Всем здрасте кулцкодеры!!У меня 1 вопрос: как в делфи програамно переименовать папку в реестре. Искал в гугле пол часа, но ничего не...

Удалить ключ в реестре
Добрый вечер, Помогите пожалуйста, нужно удалить ключ из HK_Local_Machine/SYSTEM/CurrentControlSet/Service дело в том что программа...

В реестре не создается ключ (FASM)
Скажите почему у меня в реестре не создается ключ format PE GUI 4.0 ; ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит: токи, напряжения и их 1 и 2 производные при t = 0;. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru