Форум   Статьи   Новости   Файлы   Bugtraq   Сниффер   Друзья   О Клубе
Вернуться   HPC / Кодинг / C/C++ / C++ Builder
 
  Страница 1
  , 00:29   #1
Местный
 
Регистрация: 30.10.2011
Сообщений: 293

Репутация: 4 / 0
Thumbs down Изменение строкового параметра в реестре Windows

Как изменить строковый параметр в реестре Windows посредством си++ билдер?

Рабочий пример, желательно исходник.

Читал про модуль tregistry, но что-то мой конструктор не хочет работать.
Мануалов полезных не нашел. :(
 
Пользователь вне форума    
Наши Спонсоры
  , 00:44   #2
Продвинутый
 
Аватар для BlackH
 
Локация: underworld
Регистрация: 05.12.2011
Сообщений: 1,609

Репутация: 167 / 3
По умолчанию

Там Всего то 3 API нужно и не надо никаких модулей и прочего хлама.

1.RegOpenKeyEx
2.RegSetValueEx
3.RegCloseKey
 
Пользователь вне форума    
  , 00:59   #3
Местный
 
Регистрация: 30.10.2011
Сообщений: 293

Репутация: 4 / 0
По умолчанию

Цитата:
Сообщение от BlackH Посмотреть сообщение
Там Всего то 3 API нужно и не надо никаких модулей и прочего хлама.

1.RegOpenKeyEx
2.RegSetValueEx
3.RegCloseKey
Если есть желание, можешь пример от и до привести? я с этим на никак
 
Пользователь вне форума    
  , 01:00   #4
Новичок
 
Регистрация: 12.08.2013
Сообщений: 18

Репутация: -11 / 0
По умолчанию

Цитата:
Сообщение от KzBOXer Посмотреть сообщение
Если есть желание, можешь пример от и до привести? я с этим на никак
я могу если интересует еще.
 
Пользователь вне форума    
  , 01:04   #5
Продвинутый
 
Аватар для BlackH
 
Локация: underworld
Регистрация: 05.12.2011
Сообщений: 1,609

Репутация: 167 / 3
По умолчанию

Dreamer,Ну так делаи))
Плюсану тебе.
А так решения есть,я уверен.Можно нагуглить например: си++ билдер RegOpenKeyEx
 
Пользователь вне форума    
  , 01:10   #6
Местный
 
Регистрация: 30.10.2011
Сообщений: 293

Репутация: 4 / 0
По умолчанию

Цитата:
Сообщение от BlackH Посмотреть сообщение
си++ билдер RegOpenKeyEx
Да гуглил, на сайте майкрософта нашел инфу..
Дело в том, что с синтаксисом си не дружу(
а если и нахожу часть код или исходник, не работает

Цитата:
Сообщение от Dreamer. Посмотреть сообщение
я могу если интересует еще.
Делай, жду)
 
Пользователь вне форума    
  , 06:11   #7
Продвинутый
 
Аватар для BlackH
 
Локация: underworld
Регистрация: 05.12.2011
Сообщений: 1,609

Репутация: 167 / 3
По умолчанию

И пропал))

В общем накатал я тебе на скорую руку примерчик.С++ билдера у меня нет,делал в студии.Код примитивный,одни WINAPI.Местами прокоментил даже,но там в принципе всё элементарно(Практически сам не зная C++ запилил тебе этот пример).

C++ highlight
#include <windows.h>
#include <stdio.h>
#include <string.h>

int main(){

	HKEY hKey;                       // handle
	char szValue [256] = "zna4enie"; //значение параметра


    // Открываем ключ.
    RegOpenKeyEx( HKEY_LOCAL_MACHINE,        //тут думаю понятно
                  TEXT("Software\\TestDir"), // раздел реестра Software\\TestDir
                  0, KEY_SET_VALUE,          //Если не понятно Go to MSDN
                  &hKey );                   

	// меняем значение параметра test
    RegSetValueEx( hKey,
		           TEXT("test"), //имя строкового параметра test
				   NULL,REG_SZ,
				   (BYTE *)szValue,     //значение параметра
				   strlen(szValue)+1 ); // длина значения параметра +1

	// Закрываем.
	RegCloseKey( hKey );
 
}
Я опустил различные проверки после вызова функций.
В идеале нужно чекнуть что возвращает функция RegOpenKeyEx.См.MSDN Return value.
Для чего чекать?Если ключа нет,или не хватило прав на открытие ключа- данный кодес всё равно продолжит исполнятся.
Думаю ты понял.

PS
Для теста этого кода я создал в реестре:
HKEY_LOCAL_MACHINE\SOFTWARE\TestDir -раздел
в нем создал строковый параметр test и задал ему рандомное значение (1 например)

PS pS
Код скопи-пастился суда как-то криво,в студии всё как под линеечку было))
Кароч выровняешь))
 

Последний раз редактировалось BlackH; 16.08.2013 в 06:23.
Пользователь вне форума    
  , 14:49   #8
Местный
 
Регистрация: 30.10.2011
Сообщений: 293

Репутация: 4 / 0
По умолчанию

добавил модуль
vcl.h

C++ highlight
RegSetValueEx( hKey,
		           TEXT("test"), //имя строкового параметра test
				   NULL,REG_SZ,
				   (BYTE *)szValue,     //значение параметра
				   strlen(szValue)+1 ); // длина значения параметра +1
тут вместо null указал 0, и вроде ошибки перестали вылетать, но все равно при запуске билда значение строкового параметра не меняется..

image
IMAGE http://rghost.ru/48156966/image.png
 

Последний раз редактировалось KzBOXer; 16.08.2013 в 14:54.
Пользователь вне форума    
  , 15:45   #9
Местный
 
Регистрация: 30.10.2011
Сообщений: 293

Репутация: 4 / 0
По умолчанию

Оп оп оп
Проверил сейчас свой билд на xp sp3 - меняется
на win7 и win8 не меняется

Цитата:
В идеале нужно чекнуть что возвращает функция RegOpenKeyEx.См.MSDN Return value.
над этим поработать?
 

Последний раз редактировалось KzBOXer; 16.08.2013 в 16:16.
Пользователь вне форума    
  , 16:47   #10
Продвинутый
 
Аватар для BlackH
 
Локация: underworld
Регистрация: 05.12.2011
Сообщений: 1,609

Репутация: 167 / 3
По умолчанию

Да,скорей всего.
Как вариант запихать прогу в отладчик и посмотреть что возвращает функция RegOpenKeyEx.
Я говорю может просто не хватать прав,а может еще чего.
Потыкай от имени админа.

В MSDN сказано:
"Если функция завершается успешно, возвращается значение ERROR_SUCCESS"

Вот и проверь что возвращается после вызова.

upd:
Я кстати на 7ке и тестил.У меня норм всё было.Хочешь дам свой собранный exe'шник,проверишь на чем ты там тестиш?
Может просто у тебя этот си++ билдер как то не так собирает.
 

Последний раз редактировалось BlackH; 16.08.2013 в 17:14.
Пользователь вне форума    
  , 20:50   #11
Местный
 
Регистрация: 30.10.2011
Сообщений: 293

Репутация: 4 / 0
По умолчанию

От имени админа тоже не работает
ну давай, посмотрим, ну вроде он нормальный, и компилирую по этим настройкам http://www.cyberforum.ru/cpp-builder/thread15180.html


Hide:
Чтобы просмотреть данный текст, авторизуйтесь на форуме.

Hide:
Чтобы просмотреть данный текст, авторизуйтесь на форуме.
 
Пользователь вне форума    
  , 22:37   #12
Продвинутый
 
Аватар для BlackH
 
Локация: underworld
Регистрация: 05.12.2011
Сообщений: 1,609

Репутация: 167 / 3
По умолчанию

http://rghost.ru/48168174
Мои бинарник.
 
Пользователь вне форума    
  , 22:43   #13
Местный
 
Регистрация: 30.10.2011
Сообщений: 293

Репутация: 4 / 0
По умолчанию

Аналогично - не работает
попробуй мой бинарник, будет работать?

на размер не ругайся, просто сделал все по этим настройкам для билда
http://www.cyberforum.ru/cpp-builder/thread40935.html
Можешь через вирустотал прогнать
 
Пользователь вне форума    
  , 22:52   #14
Продвинутый
 
Аватар для BlackH
 
Локация: underworld
Регистрация: 05.12.2011
Сообщений: 1,609

Репутация: 167 / 3
По умолчанию

Да,проверил только что и твой.Работает.Win 7 x86.
Я говорю тут без отладчика не обойтись.Вообще не представляю как можно что-то писать и не юзать отладчик))
Вот скрин,в ольке твоя прога,после вызова RegOpenKeyEx вернулось "0".Всё путём.
IMAGE http://rghost.ru/48168390/image.png
 
Пользователь вне форума    
  , 22:58   #15
Местный
 
Регистрация: 30.10.2011
Сообщений: 293

Репутация: 4 / 0
По умолчанию

а если все путем, тогда почему на моей 64ой и на 8ке 32ой не робит?))

upd:
винда 8ая тоже 64ая.. Оказывается о_О
и на windows server 2008 r2 64 тоже не работает
 

Последний раз редактировалось KzBOXer; 16.08.2013 в 23:04.
Пользователь вне форума    

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Pаздача от Kontika Kontik Раздачи 248 19.09.2015 17:47
Тонкие настройки Windows 7 sibrik Windows 10 14.08.2012 18:03
Полезные советы для Windows 7 Impuls Софт для Windows 2 03.01.2012 15:26
Все + и - Win 7even и новости о Win8 Bixenius Windows 3 29.11.2010 17:41
[Обзор] Твики реестра Sma1L Новичкам 1 03.09.2010 11:14



Часовой пояс GMT +2
Powered by vBulletin® 3.x.x Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.

Copyright © 2008 - 2013 «HPC» Реклама на сайте Правила Форума Пользовательское соглашение Работа на сайте
При копировании материалов ставьте ссылку на источник
Все материалы представлены только в ознакомительных целях, администрация за их использование ответственности не несет.