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

Coderec 2013-02-27 03:35:29
 
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了

这是为什么呢,文档里说若不存在就创建的啊,怎么解决呢?
...全文
661 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
lizhi_cup 2013-03-31
  • 打赏
  • 举报
回复
QT助手QSettings上有说
Note: On Windows, for 32-bit programs running in WOW64 mode, settings are stored in the following registry path: HKEY_LOCAL_MACHINE\Software\WOW6432node.
mrx102 2013-02-27
  • 打赏
  • 举报
回复
引用 5 楼 a450828540 的回复:
引用 4 楼 mrx102 的回复:Quote: 引用 3 楼 a450828540 的回复: 你可以在程序中判断一下当前操作系统,操作系统的位数,不同的系统执行不同的操作。在32位系统下应该没重定向的问题。 嗯,百度查了,我的是64的,我想问一下的是include<Windows.h>后好像还是无法使用Wow64DisableWow64FsRedirection……
我在之前也遇到这样的问题,取消重定向后,使用qsetting修改注册表,也没效果。最后注册表的修改用Windows API的。你也可以试试用API。 至于kernel32,微软的SDK里就有的。
Coderec 2013-02-27
  • 打赏
  • 举报
回复
引用 4 楼 mrx102 的回复:
Quote: 引用 3 楼 a450828540 的回复: 你可以在程序中判断一下当前操作系统,操作系统的位数,不同的系统执行不同的操作。在32位系统下应该没重定向的问题。
嗯,百度查了,我的是64的,我想问一下的是include<Windows.h>后好像还是无法使用Wow64DisableWow64FsRedirection() 能运行,不报错,没效果。。是要在pro里加东西吗?是否还要包含库,百度之,Wow64DisableWow64FsRedirection()这个需要kernel32, 麻烦了
mrx102 2013-02-27
  • 打赏
  • 举报
回复
[quote=引用 3 楼 a450828540 的回复:] 你可以在程序中判断一下当前操作系统,操作系统的位数,不同的系统执行不同的操作。在32位系统下应该没重定向的问题。
Coderec 2013-02-27
  • 打赏
  • 举报
回复
引用 2 楼 mrx102 的回复:
楼主在注册表中搜索一下表项:MyMusic.mp3。创建应该是成功了,但是不是在指定的根键下,而是在其他的地方。 猜测楼主使用的是64位系统,64位系统有文件重定向的问题。你可以试试取消文件重定向,再修改注册表。 PVOID OldValue = NULL; if( Wow64DisableWow64FsRedirection(&OldValu……
请问,用这个是否就无法移植了?除了windows.h 使用Wow64DisableWow64FsRedirection()要包含什么头文件呢?
mrx102 2013-02-27
  • 打赏
  • 举报
回复
楼主在注册表中搜索一下表项:MyMusic.mp3。创建应该是成功了,但是不是在指定的根键下,而是在其他的地方。 猜测楼主使用的是64位系统,64位系统有文件重定向的问题。你可以试试取消文件重定向,再修改注册表。 PVOID OldValue = NULL; if( Wow64DisableWow64FsRedirection(&OldValue) ) //取消文件重定向 { //添加修改注册表代码 //…… if ( FALSE == Wow64RevertWow64FsRedirection(OldValue) ) //恢复文件重定向 { return 0; } }
寒山-居士 2013-02-27
  • 打赏
  • 举报
回复
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;

16,213

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧