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

Тема в разделе "Общие вопросы по С и С++", создана пользователем Programmer_Hard, 10 май 2007.

  1. Programmer_Hard

    Programmer_Hard Гость

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

    morpheus скриптописец

    Регистрация:
    7 авг 2006
    Сообщения:
    3.927
    Симпатии:
    0
  3. Programmer_Hard

    Programmer_Hard Гость

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

    alekssgor Well-Known Member

    Регистрация:
    26 май 2008
    Сообщения:
    118
    Симпатии:
    0
    WinApi вариант без лишних текстов и лишних кбайтов

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

    //Добавление в автозагрузку
    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);

    ///////////////////////////////КОНЕЦ///////////////////////////////////////
     
Загрузка...

Поделиться этой страницей