Войти

Показать полную графическую версию : Работа с реестром С++


ShadowMas
01-10-2009, 20:29
Привет всем!
Тут начал разбираться с C++ и столкнулся с такой проблемкой, не как не определюсь с порядком построения команд в "Borland C++ v.5.02".
До этого в основном работал с скриптовыми языками там всё гораздо понятнее :)

Подскажите как будет выглядеть такая запись:

Добавить параметр типа DWORD

[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\System]
"DisableTaskMgr"=dword:00000001

Удалить

[-HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\System]
"DisableTaskMgr"=dword:00000001

На скриптовом языке "AutoIt" это будет выглядеть примерно так

Добавить параметр типа DWORD

RegWrite('HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System','DisableTaskM gr','REG_DWORD','1')

Удалить

RegDelete('HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System','DisableTask Mgr')

Drongo
01-10-2009, 20:47
ShadowMas, примерно так.

#include <registry.hpp>
...
TRegistry* reg1 = new TRegistry;

reg1->RootKey = HKEY_CURRENT_USER; //присваивание объекту 'reg' пути HKLM
reg1->OpenKey("Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\System", true);
reg1->WriteInteger("Имя_Параметра", значение);
...
reg1->DeleteValue(); // Удаляет параметр
reg1->DeleteKey(); // Удаляет ключ


Шаг 13 - TRegistry. (http://www.firststeps.ru/cbuilder/r.php?13)
Шаг 14 - Извлечение иконки по расширению файла и ее загрузка из DLL или EXE. (http://www.firststeps.ru/cbuilder/r.php?14)

[-HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\System]
"DisableTaskMgr"=dword:00000001Достаточно просто
[-HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\System]

ShadowMas
02-10-2009, 00:22
Спасиб щас опробую!

pva
02-10-2009, 07:41
Borland C++ v.5.02 »
в нём фокус, предложенный Drongo не прокатит. Надо или из библиотеки OWL класс искать, или Win32 API.
Win32 API:

// 1. получить мнимый указатель на ветку реестра HKEY функцией RegOpenKey
// 2. получить значение функцией RegQueryValue
// 3. освободить указатель RegCloseKey

unsigned char binary_data_buffer[100];
long binary_data_buffer_size;
HKEY hkey; // RegOpenKey инициализирует нулём, если не получится

if (0==RegOpenKey(HKEY_CURRENT_USER, "Software\\Path", &hkey) &&
0==RegQueryValue(hkey, "var_name", binary_data_buffer, &binary_data_buffer_size))
{
clog << hex << setfill('0');

for(unsigned b=0; n<binary_data_buffer_size; ++n)
{
clog << hex << setw(2) << unsigned(binary_data_buffer[n]) << " ";
}
}

if (hkey) RegCloseKey(hkey);

ShadowMas
02-10-2009, 20:43
Да я смотрю С++ не сильно дружит с реестром Windows ) А 1 пример я так понимаю к Borland C++ Builder 6.0 да?!

Drongo
02-10-2009, 21:11
А 1 пример я так понимаю к Borland C++ Builder 6.0 да?! »Да. Я в своей конфигурации компьютера в раздел Прочее, написал свою среду разработки, чтобы знали. :)
Borland C++ Builder 6.0 Enterprise Suite

pva
03-10-2009, 12:01
ShadowMas, С++ и реестр windows - это язык программирования и программный объект.
Да я смотрю С++ не сильно дружит с реестром Windows »
Всё равно что сказать, что русский язык со стихами не дружит.

Пример Drongo подходит к любому компилятору C/C++, который сможет использовать библиотеку VCL.
А с чем связано использование такого устаревшего компилятора как BC++ 5.0.2? Он ведь даже со стандартную библиотеку С++ неуверенно собирает...

ShadowMas
04-10-2009, 01:35
А с чем связано использование такого устаревшего компилятора как BC++ 5.0.2? Он ведь даже со стандартную библиотеку С++ неуверенно собирает... »
Просто оказался под рукой, и быстро устанавливается, а вообще я с "Borland C++ Builder 6.0" буду работать к нему я так понял этот пример приминим!

CyberStyLe
30-03-2010, 16:28
Необходимо написать программку твикер. В дальнейшем планируется сделать GUI.

Все что она будет делать, - это запускаться и добавлять/изменять/удалять в реестр некоторые ключи и параметры, после этого завершать свою работу.

Имеется опыт в написании подобных программок на AutoIt.
Пишу(пытаюсь писать) в C++ Builder 2009.

Кто подкинет хотя бы небольшой примерчик кода, чтобы было отчего отталкиваться. Ну или ссылку по моей теме.

zonderz
30-03-2010, 17:05
CyberStyLe

Вам нужно использовать класс TRegistry
в справке подробно описано +
ссылок в инете море...
http://sources.ru/builder/faq/index.html

Drongo
30-03-2010, 18:03
CyberStyLe, Темы объединю, почитайте с самого начала.

CyberStyLe
30-03-2010, 18:31
CyberStyLe, Темы объединю, почитайте с самого начала

Я не понял, приведите кто-нибудь пожалуйста часть кода с самого начала начиная с директив для CodeGear™ C++Builder® 2009 Version 12.0.3420.21218

Drongo
30-03-2010, 21:22
CyberStyLe, Вот упрощённый пример. Хотя по этой ссылке Шаг 13 - TRegistry. (http://www.firststeps.ru/cbuilder/r.php?13) и Шаг 14 - Извлечение иконки по расширению файла и ее загрузка из DLL или EXE. (http://www.firststeps.ru/cbuilder/r.php?14). Очень понятно написано. Я не по верю, что вы бы не поняли, если бы прочли. Написано более чем доходчиво.

// Работа с реестром C++ Builder 2009-----------------------------------------
#include <vcl.h>
#pragma hdrstop
#include <registry.hpp>

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
// Записать в реестр---------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
TRegistry* reg = new TRegistry;

reg->RootKey = HKEY_CURRENT_USER; //присваивание объекту 'reg' пути HKCU
reg->OpenKey("Software\\Test", true);
reg->WriteString("TestKey", "TestValue");
}
// Удалить из реетра---------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
TRegistry* reg = new TRegistry;

reg->RootKey = HKEY_CURRENT_USER;
reg->OpenKey("Software\\Test", true);
reg->DeleteValue("TestKey");
}
//---------------------------------------------------------------------------

-Marshall-
09-04-2010, 20:16
Пишу твикер и столкнулся с таким твиком, чтоб не проверять диски при загрузке системы. Так там идёт в hex формате... Раньше такого не знал, но тут столкнулся и не пойму как это реализовать на своём C++ Builder'e..
Помогите пожалуйста.
Вот сам твик (1 и 3 я реализовал, а 2 и 4 не понимаю...):

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager]
"AutoChkTimeOut"=dword:0000000

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager]
"BootExecute"=hex(7):61,00,75,00,74,00,6f,00,63,00,68,00,65,00,63,00,6b,00,20,\
00,61,00,75,00,74,00,6f,00,63,00,68,00,6b,00,20,00,2a,00,00,00,00,00

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon]
"SFCScan"=dword:00000000

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\MyComputer\cleanuppath]
@=hex(2):25,00,53,00,79,00,73,00,74,00,65,00,6d,00,52,00,6f,00,6f,00,74,00,25,\
00,5c,00,73,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,5c,00,63,00,6c,00,\
65,00,61,00,6e,00,6d,00,67,00,72,00,2e,00,65,00,78,00,65,00,20,00,2f,00,44,\
00,20,00,25,00,63,00,00,00

-Marshall-
20-04-2010, 08:36
Ну что, никто не знает? :(

Admiral
20-04-2010, 11:40
-Marshall- если не смущает что без использования встроенных возможностей Билдера то, то по второму есть пример
Для того чтобы native-приложение запускалось до загрузки винды (собственно, никак иначе его и не запустить… стандартными средствами) нужно залезть в реестр, в HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager, открыть там ключ BootExecute
...
Другой вариант – это написать небольшой код специально для регистрации нашего приложения.
BOOL RegistryAdd(PSTR szAppName)

{
... >> (http://www.xakep.ru/magazine/xa/082/114/5.asp)

Для четвёртого привожу пример чтения значения по умолчанию для ветки реестра
#include <windows.h>

int wmain(int argc, wchar_t *argv[])
{
HKEY hKey;
if(RegOpenKeyEx(HKEY_LOCAL_MACHINE, L"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\MyComputer\\cleanuppath",
NULL, KEY_QUERY_VALUE, &hKey))
return -1;
wchar_t sValue[MAX_PATH];
DWORD dwDummy = MAX_PATH;
RegQueryValueEx(hKey, NULL, NULL, NULL, (LPBYTE)sValue, &dwDummy);
RegCloseKey(hKey);
return 0;
}
В переменную (sValue)попадёт именно в строковом виде, в отличии от того что обнаружит блокнот после экспорта из реестра.
http://s48.radikal.ru/i121/1004/94/a636fb2f8e93x.jpg (http://s48.radikal.ru/i121/1004/94/a636fb2f8e93.png)




© OSzone.net 2001-2012