首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > QT开发 >

QSettings批改注册表文件关联,无法新建注册表项

2013-03-01 
QSettings修改注册表文件关联,无法新建注册表项 QSettings *Reg new QSettings(HKEY_CLASSES_ROOT\\.mp

QSettings修改注册表文件关联,无法新建注册表项

 
QSettings *Reg = new QSettings("HKEY_CLASSES_ROOT\\.mp3", QSettings::NativeFormat); 

     QString currentValue = Reg->value("Default").toString();

     if (currentValue.isEmpty() ||
      currentValue != "MyMusic.mp3")
     {
      QMessageBox::information(NULL,"information","Unregistered or Uncorrect");
      Reg->setValue("Default", "MyMusic.mp3");
      QSettings *iconReg = new QSettings("HKEY_CLASSES_ROOT\\MyMusic.mp3\\DefaultIcon", QSettings::NativeFormat);
      iconReg->setValue("Default",  QString(qApp->argv()[0]) + ",0");   //将当前运行的程序图标置入
      delete iconReg;

      QSettings *programReg = new QSettings("HKEY_CLASSES_ROOT\\MyMusic.mp3\\shell\\open\\command", QSettings::NativeFormat);
      programReg->setValue("Default", QString(qApp->argv()[0]) + " %1"); //将当前运行的程序路径置入
      delete programReg;
     }
     delete Reg;


这是代码,运行了但是没有创建新的注册表项,也就是说,置入图标和路径都失败了,现在就是让windows无法找到打开MP3文件的程序


HKEY_CLASSES_ROOT\\.mp3这一项倒是把default改成MyMusic.mp3了

这是为什么呢,文档里说若不存在就创建的啊,怎么解决呢?
[解决办法]
void QSettings::setValue ( const QString & key, const QVariant & value )
Sets the value of setting key to value. If the key already exists, the previous value is overwritten.
参考以下
//插入安装程序的注册表项
    QSettings *settings1 = new QSettings("HKEY_CLASSES_ROOT\\Installer\", QSettings::NativeFormat);
    QString strIcoPath = Global::g_homePath +"/"+CmString::strAppIconName+",0";
    settings1->setValue(".",CmString::strAndroidApk);
    strIcoPath.replace("/","\");
    settings1->setValue("DefaultIcon/.",strIcoPath);
    settings1->setValue("shell/.","open");
    settings1->setValue("shell/open/.","APk安装程序");
    QString cmd = """+Global::g_homePath+"/ApkTool.exe" -path="%1"";
    cmd.replace ("/","\");
    settings1->setValue("shell/open/command/.", cmd);
    delete settings1;
[解决办法]
楼主在注册表中搜索一下表项:MyMusic.mp3。创建应该是成功了,但是不是在指定的根键下,而是在其他的地方。
猜测楼主使用的是64位系统,64位系统有文件重定向的问题。你可以试试取消文件重定向,再修改注册表。
    PVOID OldValue = NULL;
   if( Wow64DisableWow64FsRedirection(&OldValue) ) //取消文件重定向

     {

          //添加修改注册表代码

          //……

          if ( FALSE == Wow64RevertWow64FsRedirection(OldValue) ) //恢复文件重定向
             {


                   return 0;
              }

    }

热点排行