Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.94/18: Рейтинг темы: голосов - 18, средняя оценка - 4.94
Незнайка
26 / 11 / 2
Регистрация: 14.10.2016
Сообщений: 373
Записей в блоге: 2

Запись значения в ключ (реестр)

23.03.2017, 12:41. Показов 3530. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
День всем добрый!

При работе с реестром я столкнулся с такой проблемой:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, TEXT("SOFTWARE\\Microsoft\\.NET Framework Register"), 0, KEY_ALL_ACCESS, &hKey) != ERROR_SUCCESS) {
            RegCreateKeyEx(HKEY_LOCAL_MACHINE, TEXT("SOFTWARE\\Microsoft\\.NET Framework Register"), 0, NULL, 0, 0, NULL, &hKey, &dwDisposition);
 
            if (dwDisposition != REG_CREATED_NEW_KEY && dwDisposition != REG_OPENED_EXISTING_KEY) {
                cout << "\nНе удалось создать ключ\n";
            }
            else {
                cout << "\nКлюч успешно создан\n";
                if (RegSetValueEx(hKey, TEXT("String Value"), NULL, REG_SZ, szStr, 1) == ERROR_SUCCESS) {
                    cout << "\nЗначение установлено\n";
                }
                else {
                    cout << "\nНе удалось установить значение\n";
                }
            }
        }
        else
        {
            cout << "\nПуть существует\n";
                        /* Дальше ещё не доработал... */
        }
        RegCloseKey(hKey);
На входе у меня получается так, что новый ключ создаётся, а новое значение создаваться отказывается.

Почему так?
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
23.03.2017, 12:41
Ответы с готовыми решениями:

Как сделать запись в реестр win7 64. В реестр попадает только последняя запись
Добрый вечер! Не могу сделать запись в реестр win7 64. Microsoft.Win32.RegistryKey hklm = Microsoft.Win32.Registry.LocalMachine; ...

Запись значения в реестр
RegistryKey error1 = Registry.LocalMachine.OpenSubKey(@&quot;SOFTWARE\Microsoft\Windows\CurrentVersion\Authentication\LogonUI\Background&quot;,...

Запись значения в реестр
Нужно записать значение в реестр, в параметр KEY (REG_DWORD). Вот скрин ...

7
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16481 / 7444 / 1187
Регистрация: 02.05.2013
Сообщений: 11,616
Записей в блоге: 1
23.03.2017, 13:52
Цитата Сообщение от mkostoevr Посмотреть сообщение
создаваться отказывается.
Что это значит? Код ошибки какой?
0
Незнайка
26 / 11 / 2
Регистрация: 14.10.2016
Сообщений: 373
Записей в блоге: 2
23.03.2017, 14:12  [ТС]
Убежденный, ошибок нет, просто консоль выводит "Не удалось установить значение". То есть, при выполнении этого участка:

C++
1
2
3
4
5
6
if (RegSetValueEx(hKey, TEXT("String Value"), NULL, REG_SZ, szStr, 1) == ERROR_SUCCESS) {
                    cout << "\nЗначение установлено\n";
                }
                else {
                    cout << "\nНе удалось установить значение\n";
                }
C++
1
RegSetValueEx(hKey, TEXT("String Value"), NULL, REG_SZ, szStr, 1
выполняется с ошибкой, выводится текст из "else".

Скорее всего, здесь дело в разрешении доступа к ключу при его создании (в первой функции)
0
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16481 / 7444 / 1187
Регистрация: 02.05.2013
Сообщений: 11,616
Записей в блоге: 1
23.03.2017, 14:14
Лучший ответ Сообщение было отмечено mkostoevr как решение

Решение

У RegSetValueEx есть возвращаемое значение. Вот выведи его в консоль. Что получится?

Добавлено через 1 минуту
P.S. Ты у RegCreateKeyEx не забыл прописать KEY_ALL_ACCESS?
1
Незнайка
26 / 11 / 2
Регистрация: 14.10.2016
Сообщений: 373
Записей в блоге: 2
23.03.2017, 14:34  [ТС]
Забыл, и, судя по всему, проблема была именно в этом. Спасибо!

Добавлено через 5 минут
Если кому-то понадобится, вот правильный код:

C++
1
RegCreateKeyEx(HKEY_LOCAL_MACHINE, TEXT("SOFTWARE\\Microsoft\\.NET Framework Register"), 0, NULL, 0, KEY_ALL_ACCESS, NULL, &hKey, &dwDisposition);
0
0 / 0 / 0
Регистрация: 15.07.2016
Сообщений: 16
21.04.2017, 15:08
Приветствую всех! Решил не создавать новую тему.
А у меня всё правильно изначально было, но ключи в реестре не создаются и не открываются

C++
1
2
3
4
5
6
7
8
9
10
PHKEY myresult = NULL;
int cresult;
 
if (ERROR_SUCCESS != (cresult = RegCreateKeyEx(HKEY_CURRENT_USER, TEXT("SOFTWARE\\Crutches\\mykey"), 0, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, myresult, NULL))) {
            cout << "Error create RegKey. :(" << endl;
            cout << "Error: " << cresult << endl;
        }
        else {
            RegCloseKey(*myresult);
        }
А тут создаем руками в HKEY_CURRENT_USER\SOFTWARE\Crutches\ ключ mykey2
C++
1
2
3
4
5
6
7
8
9
10
PHKEY myresult = NULL;
int cresult;
 
if (ERROR_SUCCESS != (cresult = RegOpenKeyEx(HKEY_CURRENT_USER, TEXT("SOFTWARE\\Crutches\\mykey2"), 0, KEY_ALL_ACCESS, myresult))) {
            cout << "Error Open RegKey. :(" << endl;
            cout << "Error: " << cresult << endl;
        }
        else {
            RegCloseKey(*myresult);
        }
Windows 10 x64 Pro, не убитая ставил пару недель назад специально для кодинга.
Что тут надо? Уже все интернеты перерыл, такое ощущение что у всех работает кроме меня
0
232 / 135 / 19
Регистрация: 10.11.2015
Сообщений: 305
21.04.2017, 16:09
coolzoom, функциям RegCreateKeyEx и RegOpenKeyEx нужно передать указатель на HKEY в который они вернут результат. Ты, в своем коде, определяешь указатель равный NULL и передаешь его функциям. Куда им писать результат? Вот исправленный вариант:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
    HKEY myresult = NULL;
    LONG cresult;
 
    if (ERROR_SUCCESS != (cresult = RegCreateKeyEx(HKEY_CURRENT_USER, L"SOFTWARE\\Crutches\\mykey", 0, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &myresult, NULL))) {
        std::cout << "Error create RegKey. :(" << std::endl;
        std::cout << "Error: " << cresult << std::endl;
    }
    else {
        RegCloseKey(myresult);
    }
 
    if (ERROR_SUCCESS != (cresult = RegOpenKeyEx(HKEY_CURRENT_USER, L"SOFTWARE\\Crutches\\mykey", 0, KEY_ALL_ACCESS, &myresult))) {
         std::cout << "Error Open RegKey. :(" <<  std::endl;
         std::cout << "Error: " << cresult <<  std::endl;
    }
    else {
        RegCloseKey(myresult);
    }
}
3
0 / 0 / 0
Регистрация: 15.07.2016
Сообщений: 16
21.04.2017, 20:15
Цитата Сообщение от jupman Посмотреть сообщение
функциям RegCreateKeyEx и RegOpenKeyEx нужно передать указатель на HKEY в который они вернут результат. Ты, в своем коде, определяешь указатель равный NULL и передаешь его функциям. Куда им писать результат?
Спасибо вам большое!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
21.04.2017, 20:15
Помогаю со студенческими работами здесь

Запись в реестр DWORD большого значения
Привет всем. Для работы сделал подборку программ, собрал их в WPI. Появилась проблема при установке программ часто выскакивает сообщение:...

Запись значения в реестр и удаление из реестра
Пытался пытался, так и не получилось поладить с api для реестра. Нужно установить значение и потом удалить. public bool...

Запись значения в реестр - нет прав для записи даже в ветку Current User
Всем привет. Помогите записать значение в реестр код RegistryKey lyncBook =...

Реестр(добавить ключ)
Всем доброго времени суток, Требуется скрыть пользователя из бат файла; Имя пользователя : admin, пароль: pass; Надо чтобы его не...

Как програмным путём добавить ключ в реестр?
Как на VB .NET програмным путём добавить ключ типа DWORD со значением 1 (0х00000001) по адресу...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru