crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> Работа с реестром
Гость_Гость_FenixTES_*_*
сообщение 10.11.2009, 21:34
Сообщение #1





Гости








    


мне нужно залесть в HKEY_CURRENT_USER, ну и там дальше получить значения(если точно то в HKEY_CURRENT_USER\Volatile Environment) можно ли на qt залесть туда и получить соответствующие значения?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ViGOur
  опции профиля:
сообщение 10.11.2009, 21:41
Сообщение #2


Мастер
******

Группа: Модератор
Сообщений: 3291
Регистрация: 9.10.2007
Из: Москва
Пользователь №: 4

Спасибо сказали: 231 раз(а)




Репутация:   40  


Смотри: Accessing the Windows Registry Directly, там есть пример чтения и записи в реестр windows.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 11.11.2009, 4:05
Сообщение #3


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9656
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


к сожалению через QSettings не все ветки реестра доступны (к такому выводу пришли в своё время на прогорге)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kuzulis
  опции профиля:
сообщение 11.11.2009, 8:40
Сообщение #4


Активный участник
***

Группа: Участник
Сообщений: 393
Регистрация: 29.6.2009
Пользователь №: 862

Спасибо сказали: 36 раз(а)




Репутация:   7  


Цитата
к сожалению через QSettings не все ветки реестра доступны (к такому выводу пришли в своё время на прогорге)


+1

Поэтому придется использовать Win32 API
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 16.9.2010, 12:34
Сообщение #5


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9656
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


тему разделил: а не под виндой есть аналоги реестра ?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 18.9.2010, 14:10
Сообщение #6


фрилансер
******

Группа: Участник
Сообщений: 2900
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

Спасибо сказали: 215 раз(а)




Репутация:   34  


а как в реестр, в Run, записать значение, пробовал вот так:
    QSettings S_AutoRun;

    QString param="appname";
    QString exepath=QDir::toNativeSeparators(QApplication::applicationFilePath());
    
    //пробовал с обоими вариантами сепараторов    
    QString regpath=QString("HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Run\\")+param;
//    QString regpath=QString("HKEY_CURRENT_USER/Software/Microsoft/Windows/CurrentVersion/Run/")+param;
    
    S_AutoRun.setValue(regpath,QVariant(exepath));

в реестре не появляется ничего.

Или это и есть
Цитата(kuzulis @ 11.11.2009, 11:40) *
к сожалению через QSettings не все ветки реестра доступны (к такому выводу пришли в своё время на прогорге)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 18.9.2010, 19:52
Сообщение #7


фрилансер
******

Группа: Участник
Сообщений: 2900
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

Спасибо сказали: 215 раз(а)




Репутация:   34  


вот так победилось
Раскрывающийся текст
#include <windows.h>

void SetAppAutorunToReg(QString ParamName,bool bErase=false)
{
    //корректируем автозагрузку
    
    //ключ
    const char* pch_regpath="Software\\Microsoft\\Windows\\CurrentVersion\\Run";
    
    //имя параметра
    QString param=ParamName;
    std::vector<wchar_t> wch_param((param.length()+1),0);
    param.toWCharArray(&wch_param[0]);

    //значение параметра
    std::vector<wchar_t> wch_exepath;
    if(!bErase)
    {
        //запишем в параметр путь к экзешнику
        QString exepath=QDir::toNativeSeparators(QApplication::applicationFilePath());
        wch_exepath.resize((exepath.length()+1),0);
        exepath.toWCharArray(&wch_exepath[0]);
    }
    
    
    HKEY k=0;
    DWORD dwdRes=RegOpenKeyExA(HKEY_CURRENT_USER,pch_regpath,0,KEY_ALL_ACCESS,&k);
    if(dwdRes==ERROR_SUCCESS)
    {
        if(bErase)
        {
            RegDeleteValueW(k,&wch_param[0]);
        }
        else
        {
            RegSetValueExW(k, &wch_param[0], 0, REG_SZ,
                (BYTE*)&wch_exepath[0],
                wch_exepath.size()*sizeof(wch_exepath[0])
                );
        }

        RegCloseKey(k);
        k=0;
    }
}


Сообщение отредактировал Алексей1153 - 18.9.2010, 22:24
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 18.9.2010, 20:52
Сообщение #8


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9656
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(Алексей1153 @ 18.9.2010, 18:10) *
Или это и есть
Цитата(kuzulis @ 11.11.2009, 11:40) *
к сожалению через QSettings не все ветки реестра доступны (к такому выводу пришли в своё время на прогорге)
пару месяцев назад понадобилось службами в виндовозе рулить. Пришёл к выводу, что могу лазить по многим веткам реестра, но какая-то грабля была
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 10.7.2020, 12:05