当前位置: 代码迷 >> QT开发 >> QSettings批改注册表文件关联,无法新建注册表项
  详细解决方案

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

热度:12   发布时间:2016-04-25 04:05:44.0
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) ) //恢复文件重定向
             {
  相关解决方案