Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум на CrossPlatform.RU _ Qt Общие вопросы _ Работа с реестром

Автор: Гость_FenixTES_* 10.11.2009, 21:34

мне нужно залесть в HKEY_CURRENT_USER, ну и там дальше получить значения(если точно то в HKEY_CURRENT_USER\Volatile Environment) можно ли на qt залесть туда и получить соответствующие значения?

Автор: ViGOur 10.11.2009, 21:41

Смотри: http://www.doc.crossplatform.ru/qt/4.5.0/qsettings.html#accessing-the-windows-registry-directly, там есть пример чтения и записи в реестр windows.

Автор: Litkevich Yuriy 11.11.2009, 4:05

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

Автор: kuzulis 11.11.2009, 8:40

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


+1

Поэтому придется использовать Win32 API

Автор: Litkevich Yuriy 16.9.2010, 12:34

тему разделил: http://www.forum.crossplatform.ru/index.php?showtopic=5594

Автор: Алексей1153 18.9.2010, 14:10

а как в реестр, в 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

вот так победилось

Раскрывающийся текст
#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;
    }
}

Автор: Litkevich Yuriy 18.9.2010, 20:52

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

Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)