Форум программистов, компьютерный форум CyberForum.ru

Как изменить значение в реестре? - C++

Восстановить пароль Регистрация
 
IVIakCollideR
 Аватар для IVIakCollideR
36 / 36 / 11
Регистрация: 26.12.2013
Сообщений: 309
16.03.2014, 17:00     Как изменить значение в реестре? #1
привет!
Я новичек в с++, среда разработки - dev c++/
Помогите примером, мне нужно открыть необходимую ветку реестра и поменять значение в указанной строке.
Как это можно реализовать?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
MicM
 Аватар для MicM
820 / 487 / 90
Регистрация: 29.12.2009
Сообщений: 1,097
Завершенные тесты: 1
16.03.2014, 17:06     Как изменить значение в реестре? #2
Цитата Сообщение от IVIakCollideR Посмотреть сообщение
Как это можно реализовать?
Например, с помощью WinAPI
http://msdn.microsoft.com/en-us/libr...(v=vs.85).aspx
Здесь есть множество функций для работы с реестром
IVIakCollideR
 Аватар для IVIakCollideR
36 / 36 / 11
Регистрация: 26.12.2013
Сообщений: 309
16.03.2014, 17:22  [ТС]     Как изменить значение в реестре? #3
Цитата Сообщение от MicM Посмотреть сообщение
Например, с помощью WinAPI
а какой то пример можно?
Я на с++ первый день пишу, понимаю что ничего не понимаю и нужно начинать с основ, но позарез нужно открыть и изменить значение.
Создать ветку по примеру получилось, а вот открыть, никак...
MicM
 Аватар для MicM
820 / 487 / 90
Регистрация: 29.12.2009
Сообщений: 1,097
Завершенные тесты: 1
16.03.2014, 17:30     Как изменить значение в реестре? #4
Цитата Сообщение от IVIakCollideR Посмотреть сообщение
а какой то пример можно?
Можете в интернете примеры поискать, сам я на WinAPI ни разу не писал.
IVIakCollideR
 Аватар для IVIakCollideR
36 / 36 / 11
Регистрация: 26.12.2013
Сообщений: 309
16.03.2014, 18:59  [ТС]     Как изменить значение в реестре? #5
Цитата Сообщение от MicM Посмотреть сообщение
Можете в интернете примеры поискать, сам я на WinAPI ни разу не писал.
та я искал, мало чего понятно

Добавлено через 26 минут
Пробовал следующим способом, но не получилось
думал будет создаваться ветка, а в случае если она уже создана то просто запишется значение в нее
C++
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
#include <cstdlib>
#include <iostream>
#include <Windows.h>
#include <tchar.h>
 
using std::cout;
using std::endl;
 
#ifdef _UNICODE
#  define _tcout wcout
#else
#  define _tcout cout
#endif // _UNICODE
 
int _tmain(int argc, _TCHAR* argv[])
{
  _tsetlocale(LC_ALL, _T("Russain"));
 
  _TCHAR szTestString[] = _T("3");
 
  _TCHAR szPath[] = _T("SYSTEM\CurrentControlSet\\");
 
  HKEY hKey;
 
  if(RegCreateKeyEx(HKEY_LOCAL_MACHINE, szPath, 0, NULL, REG_OPTION_VOLATILE, KEY_WRITE, NULL, &hKey, NULL) != ERROR_SUCCESS){
    _tcout << _T("Ïðè ñîçäГ*Г*ГЁГЁ êëþ÷Г* ïðîèçîøëГ* îøèáêГ*") << endl;
    return 1;
  }
 
  // ГЏГЁГёГҐГ¬ òåñòîâóþ ñòðîêó Гў ñîçäГ*Г*Г*ûé êëþ÷
  if(RegSetValueEx(hKey, _T("Start"), 0, REG_SZ, (BYTE*)szTestString, sizeof(szTestString)) != ERROR_SUCCESS){
    _tcout << _T("Ïðè") << endl;
    return 2;
  }
Добавлено через 41 минуту
народ как открыть ветку реестра кто знает?)
uhx
 Аватар для uhx
56 / 56 / 6
Регистрация: 11.07.2013
Сообщений: 300
16.03.2014, 19:02     Как изменить значение в реестре? #6
Цитата Сообщение от IVIakCollideR Посмотреть сообщение
народ как открыть ветку реестра кто знает?)
Сначала выучить основы, чтобы хотя бы понимать тот код, который вы написали выше.
Кстати, так Вам нужно ее именно открыть (чтобы пользователь сам мог ее редактировать) ???
Убежденный
Системный программист
 Аватар для Убежденный
14175 / 6190 / 982
Регистрация: 02.05.2013
Сообщений: 10,304
Завершенные тесты: 1
16.03.2014, 19:02     Как изменить значение в реестре? #7
Цитата Сообщение от IVIakCollideR Посмотреть сообщение
Помогите примером, мне нужно открыть необходимую ветку реестра и поменять значение в указанной строке.
RegOpenKeyEx -> RegSetValue -> RegCloseKey.
IVIakCollideR
 Аватар для IVIakCollideR
36 / 36 / 11
Регистрация: 26.12.2013
Сообщений: 309
16.03.2014, 19:50  [ТС]     Как изменить значение в реестре? #8
Цитата Сообщение от Убежденный Посмотреть сообщение
RegOpenKeyEx -> RegSetValue -> RegCloseKey.
сделал, но не работает, в чем дело?
C++
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
#include <cstdlib>
#include <iostream>
#include <Windows.h>
#include <tchar.h>
 
using std::cout;
using std::endl;
 
int _tmain(int argc, _TCHAR* argv[]){
  _tsetlocale(LC_ALL, _T("Russain"));
  _TCHAR szTestString[] = _T("4");
  _TCHAR szPath[] = _T("SYSTEM\CurrentControlSet\services\USBSTOR\\");
  HKEY hKey;
  
  if(RegOpenKeyEx (HKEY_LOCAL_MACHINE, szPath, NULL, NULL, &hKey) != ERROR_SUCCESS){
    _tcout << _T("error") << endl;
    return 1;
  }
 
  if(RegSetValueEx(hKey, _T("Start"), 0, REG_SZ, (BYTE*)szTestString, sizeof(szTestString)) != ERROR_SUCCESS){
    _tcout << _T("error") << endl;
    return 2;
  }
 
  if(RegCloseKey(hKey) != ERROR_SUCCESS){
    _tcout << _T("error") << endl;
    return 3;
  };
 
  return 0;
}
Убежденный
Системный программист
 Аватар для Убежденный
14175 / 6190 / 982
Регистрация: 02.05.2013
Сообщений: 10,304
Завершенные тесты: 1
16.03.2014, 21:06     Как изменить значение в реестре? #9
Цитата Сообщение от IVIakCollideR Посмотреть сообщение
сделал, но не работает
"не работает" - это не описание проблемы.

Цитата Сообщение от IVIakCollideR Посмотреть сообщение
_TCHAR szPath[] = _T("SYSTEM\CurrentControlSet\services\USBSTOR\\");
В C/C++ обратный слэш нужно экранировать:
SYSTEM\\CurrentControlSet\\Services\\USBSTOR

Цитата Сообщение от IVIakCollideR Посмотреть сообщение
_tcout << _T("error") << endl;
"error" - этого слишком мало для диагностики ошибок.
Используйте GetLastError для получения кода ошибки, и программу
Error Lookup (есть в меню "Tools" Visual Studio" для расшифровки.
IVIakCollideR
 Аватар для IVIakCollideR
36 / 36 / 11
Регистрация: 26.12.2013
Сообщений: 309
16.03.2014, 22:01  [ТС]     Как изменить значение в реестре? #10
исправил слеши.
Цитата Сообщение от Убежденный Посмотреть сообщение
"error" - этого слишком мало для диагностики ошибок.
дело не в том, оно даже не запускается, тсть ошибка еще на момент компиляции.

логи на фото.
Миниатюры
Как изменить значение в реестре?  
IVIakCollideR
 Аватар для IVIakCollideR
36 / 36 / 11
Регистрация: 26.12.2013
Сообщений: 309
16.03.2014, 22:56  [ТС]     Как изменить значение в реестре? #11
может есть кто, кому под силу работать с реестром? хелпс)))
Убежденный
Системный программист
 Аватар для Убежденный
14175 / 6190 / 982
Регистрация: 02.05.2013
Сообщений: 10,304
Завершенные тесты: 1
16.03.2014, 23:10     Как изменить значение в реестре? #12
Цитата Сообщение от IVIakCollideR Посмотреть сообщение
может есть кто, кому под силу работать с реестром?
Может, выложите код и ошибки компилятора перед тем, как начинать язвить ?
IVIakCollideR
 Аватар для IVIakCollideR
36 / 36 / 11
Регистрация: 26.12.2013
Сообщений: 309
17.03.2014, 16:23  [ТС]     Как изменить значение в реестре? #13
Цитата Сообщение от Убежденный Посмотреть сообщение
Может, выложите код и ошибки компилятора перед тем, как начинать язвить ?
В СМЫСЛЕ ЯЗВИТЬ????
конкретно вопрос задал, вы не знаете, так возможно еще кто знает, мало ли люди подумали что вопрос решен и помогать ненужно уже.

И КОД И ОШИБКИ Я ВЫЛОЖИЛ.
последний лог компилятора после исправления слешей и обработчиков ошибок в предпоследнем моем посте, смотрите внимательней!

Добавлено через 15 часов 56 минут
И все таки, как открыть ветку в реестре?
MicM
 Аватар для MicM
820 / 487 / 90
Регистрация: 29.12.2009
Сообщений: 1,097
Завершенные тесты: 1
17.03.2014, 16:44     Как изменить значение в реестре? #14
Цитата Сообщение от IVIakCollideR Посмотреть сообщение
И все таки, как открыть ветку в реестре?
А вам принципиально надо в С++?
Просто можно,например, батник написать, который будет это делать.
IVIakCollideR
 Аватар для IVIakCollideR
36 / 36 / 11
Регистрация: 26.12.2013
Сообщений: 309
17.03.2014, 17:33  [ТС]     Как изменить значение в реестре? #15
Цитата Сообщение от MicM Посмотреть сообщение
А вам принципиально надо в С++?
я просто пишу на джаве и с помощью джини буду запускать нативные функции сишки.
в принципе можно попробовать использовать батник. Если у вас есть такой, то буду благодарен.
MicM
 Аватар для MicM
820 / 487 / 90
Регистрация: 29.12.2009
Сообщений: 1,097
Завершенные тесты: 1
17.03.2014, 17:54     Как изменить значение в реестре? #16
Цитата Сообщение от IVIakCollideR Посмотреть сообщение
в принципе можно попробовать использовать батник. Если у вас есть такой, то буду благодарен.
Нет, у меня такого нет. Если заинтересовало, войдите в командную строку, наберите reg /?, и будет вам более чем исчерпывающая справка с примерами
IVIakCollideR
 Аватар для IVIakCollideR
36 / 36 / 11
Регистрация: 26.12.2013
Сообщений: 309
17.03.2014, 20:00  [ТС]     Как изменить значение в реестре? #17
Люди, как открыть реестр через с++?)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.03.2014, 09:06     Как изменить значение в реестре?
Еще ссылки по теме:

Возможно ли изменить начальное значение переменной? C++
Изменить значение переменной в функции C++
Как изменить в реестре стартовую страницу Internet Explorer? C++

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

Или воспользуйтесь поиском по форуму:
Убежденный
Системный программист
 Аватар для Убежденный
14175 / 6190 / 982
Регистрация: 02.05.2013
Сообщений: 10,304
Завершенные тесты: 1
22.03.2014, 09:06     Как изменить значение в реестре? #18
Цитата Сообщение от IVIakCollideR Посмотреть сообщение
В СМЫСЛЕ ЯЗВИТЬ????
В смысле - спрашивать "может есть кто, кому под силу работать с реестром" на
форуме программистов.

конкретно вопрос задал, вы не знаете, так возможно еще кто знает
Ответ уже дали выше. Осталось заглянуть в документацию и написать код.

И КОД И ОШИБКИ Я ВЫЛОЖИЛ.
Ошибки - это копия вывода компилятора (окно "Output" в Visual C++, например), а
не какой-то непонятный скрин.

последний лог компилятора после исправления слешей и обработчиков ошибок в предпоследнем моем посте, смотрите внимательней!
Посмотрел внимательно.
На скрине ошибка в строке 20 в функции RegOpenKeyEx, а в
коде в этой строке стоит RegSetValueEx. Где правда ?

Люди, как открыть реестр через с++?
RegOpenKeyEx (или RegCreateKeyEx) -> RegQueryValue/RegSetValue -> RegCloseKey.
Yandex
Объявления
22.03.2014, 09:06     Как изменить значение в реестре?
Ответ Создать тему
Опции темы

Текущее время: 10:29. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru