Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Работа с реестром
Форум на CrossPlatform.RU > Библиотеки > Qt > Qt Общие вопросы
Гость_FenixTES_*
мне нужно залесть в HKEY_CURRENT_USER, ну и там дальше получить значения(если точно то в HKEY_CURRENT_USER\Volatile Environment) можно ли на qt залесть туда и получить соответствующие значения?
ViGOur
Смотри: Accessing the Windows Registry Directly, там есть пример чтения и записи в реестр windows.
Litkevich Yuriy
к сожалению через QSettings не все ветки реестра доступны (к такому выводу пришли в своё время на прогорге)
kuzulis
Цитата
к сожалению через QSettings не все ветки реестра доступны (к такому выводу пришли в своё время на прогорге)


+1

Поэтому придется использовать Win32 API
Litkevich Yuriy
тему разделил: а не под виндой есть аналоги реестра ?
Алексей1153
а как в реестр, в 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
вот так победилось
Раскрывающийся текст
#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
Цитата(Алексей1153 @ 18.9.2010, 18:10) *
Или это и есть
Цитата(kuzulis @ 11.11.2009, 11:40) *
к сожалению через QSettings не все ветки реестра доступны (к такому выводу пришли в своё время на прогорге)
пару месяцев назад понадобилось службами в виндовозе рулить. Пришёл к выводу, что могу лазить по многим веткам реестра, но какая-то грабля была
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.