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;
}
}