Запись в системный реестр

  • Автор темы Programmer_Hard
  • Дата начала
P

Programmer_Hard

#1
Кто-нибудь знает,
как записать в системный реестр строку, или удалить ее оттуда?
 
P

Programmer_Hard

#3
а я только со второго раза понимаю :)
спасибо
 

alekssgor

Well-known member
26.05.2008
118
0
#4
WinApi вариант без лишних текстов и лишних кбайтов

Код:
/////////////////////////Работа с системным реестром//////////////////////////////////////

//Добавление в автозагрузку
void AddAutoRun(char* name, char* path)
{
HKEY key;
TCHAR title[MAX_PATH];
DWORD size = MAX_PATH;
RegOpenKeyEx(HKEY_LOCAL_MACHINE,"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run",0,KEY_WRITE, &key);
strcpy(title, path);
RegSetValueEx(key, name, 0,REG_SZ,(LPBYTE)title,size);
RegCloseKey(key);
}
//Добавить раздел
bool CreateKey(HKEY h, char* path, char* name )
{
HKEY key;
if(RegOpenKeyEx(h,path,0,KEY_WRITE, &key)==REG_OPENED_EXISTING_KEY)
return false;
RegCreateKeyA(key,name,&key);
RegCloseKey(key);
return true;
}
//Добавить ключ в раздел или изменить значение ключа
bool SetValueString(HKEY h, char* path, char* name, char* values )
{
HKEY key;
TCHAR title[MAX_PATH];
DWORD size = MAX_PATH;
if(RegOpenKeyEx(h,path,0,KEY_WRITE, &key)==REG_OPENED_EXISTING_KEY)
return false;
strcpy(title, values);
RegSetValueEx(key, name, 0,REG_SZ,(LPBYTE)title,size);
RegCloseKey(key);
return true;
}
//Получить значение ключа
bool GetValueString(HKEY h, char* path, char* getkey, char *Value)
{
HKEY key;
char szValue[MAX_PATH];
DWORD dwMaxValue = MAX_PATH; 
if(RegOpenKeyEx(h, path, 0, KEY_READ, &key)==REG_OPENED_EXISTING_KEY)
return false;
RegQueryValueEx(key, getkey, NULL, NULL, (LPBYTE)szValue, &dwMaxValue);
strcpy(Value, szValue);
//теперь в Value значение, соответствующее имени "getkey". 
RegCloseKey(key);
return true;
}
//Существует раздел или нет
bool EnableKey(HKEY h, char* path)
{
HKEY key;
if(RegOpenKeyEx(h, path, 0, KEY_READ, &key)==REG_OPENED_EXISTING_KEY)
return false;
else
return true;
}
//Про удаление вообще просто
//Тестируем

/////////////////////Добавление в автозагрузку/////////////////////////
AddAutoRun("Программа","C:\\rt23.exe");
////////////////////Создание раздела/////////////////////////
if(!CreateKey(HKEY_LOCAL_MACHINE, "SOFTWARE", "Программа2"))
MessageBox(hwnd,"Ошибка при создании ветви!","Сообщение",0);
else
MessageBox(hwnd,"Ветвь удачно создана!","Сообщение",0);
///////////////////Создание ключа////////////////////////////
if(!SetValueString(HKEY_LOCAL_MACHINE, "SOFTWARE\\Программа2", "PATH", "C:\\ProgramFiles\\setup.exe"))
MessageBox(hwnd,"Ошибка при открытии ветви!","Сообщение",0);
else
MessageBox(hwnd,"Ключ успешно создан!","Сообщение",0);
////////////////////Получение значения ключа///////////////////////////
char mystr[MAX_PATH];
if(GetValueString(HKEY_LOCAL_MACHINE, "SOFTWARE\\Программа2","PATH",mystr))
MessageBox(hwnd,mystr ,"Сообщение",0);
else
MessageBox(hwnd,"Ошибка" ,"Сообщение",0);
////////////////////Существует раздел или нет//////////////////////////
if(EnableKey(HKEY_LOCAL_MACHINE, "SOFTWARE\\Программа2"))
MessageBox(hwnd,"Раздел существует" ,"Сообщение",0);
else
MessageBox(hwnd,"Раздел не существует" ,"Сообщение",0);

///////////////////////////////КОНЕЦ///////////////////////////////////////