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

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

11.06.2014, 10:35. Показов 1640. Ответов 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 / 3925 / 742
Регистрация: 11.10.2011
Сообщений: 5,908
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 / 3925 / 742
Регистрация: 11.10.2011
Сообщений: 5,908
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
Модератор
10057 / 3902 / 884
Регистрация: 22.02.2013
Сообщений: 5,853
Записей в блоге: 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
Ответ Создать тему
Новые блоги и статьи
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Функция заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
10 пpимет, которые всегда сбываются
Maks 31.03.2026
1. Чтобы, наконец, пришла маршрутка, надо закурить. Если сигарета последняя, маршрутка придет еще до второй затяжки даже вопреки расписанию. 2. Нaдоели зима и снег? Не надо переезжать. Достаточно. . .
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 31.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru