crossplatform.ru

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


  Ответ в Работа с реестром
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
 

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
Litkevich Yuriy Дата 18.9.2010, 20:52
 
Цитата(Алексей1153 @ 18.9.2010, 18:10) *
Или это и есть
Цитата(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;
    }
}
Алексей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 не все ветки реестра доступны (к такому выводу пришли в своё время на прогорге)
Litkevich Yuriy Дата 16.9.2010, 12:34
  тему разделил: а не под виндой есть аналоги реестра ?
kuzulis Дата 11.11.2009, 8:40
 
Цитата
к сожалению через QSettings не все ветки реестра доступны (к такому выводу пришли в своё время на прогорге)


+1

Поэтому придется использовать Win32 API
Litkevich Yuriy Дата 11.11.2009, 4:05
  к сожалению через QSettings не все ветки реестра доступны (к такому выводу пришли в своё время на прогорге)
ViGOur Дата 10.11.2009, 21:41
  Смотри: Accessing the Windows Registry Directly, там есть пример чтения и записи в реестр windows.
Гость_FenixTES_* Дата 10.11.2009, 21:34
  мне нужно залесть в HKEY_CURRENT_USER, ну и там дальше получить значения(если точно то в HKEY_CURRENT_USER\Volatile Environment) можно ли на qt залесть туда и получить соответствующие значения?
Просмотр темы полностью (откроется в новом окне)
RSS Текстовая версия Сейчас: 28.3.2024, 21:19