浅谈:利用QSettings来获取windows已安装程序名字列表的方法

weixin_38054042 2019-09-19 05:53:18
这个问题困扰了我两个小时,最开始我以为必须要调用windows的api来读取注册表的才能达到这个目的。网上很多人博客上提到的方法都是调用windows的RegEnumKeyEx()这个函数(他们博客的内容都一样,估计都是复制别人的,非原创)。但是经过我一个多小时的调研和反复摸索发现就用QSettings完全可以完成这个功能,下面简单解释一下我的方法,给后人留下一些宝贵经验,让他们可以站在我的肩膀上: 1.首先找到注册表记录已安装程序的列表的具体位置,我的系统是xp所以具体位置是:HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall   不知道winows 7上面是不是这个位置,可以自己找一下。 2. 定义一个链表来装最终的结果 QStringList  appInfoList; 3.调用QSettings的函数allKeys()来得到一个装有所有Uninstall目录下子键的QStringList,其中有一些是已安装程序的子键,还有一些我也不知道是什么,不管他们: QStringList l_temp = QSettings("HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall", QSettings::NativeFormat).allKeys(); 列表中得某一项是一个QString,内容大概就是这样的“迅雷看看高清播放组件/DisplayName”这个DisplayName项对应的值就是我们要找的名字。 4.由于我们只需要已安装程序的名字,所以我们只留下含有“DisplayName”的项。于是就过滤一下第3步的那个链表并把DisplayName项对应的值保留下来foreach(QString t, l_temp)  {      if(t.contains("DisplayName")) //用contains来过滤      {          QString sysInfo = QSettings("HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall",                                      QSettings::NativeFormat).value(t).toString() + "\n";          appInfoList.append(sysInfo);      }  } 这个appInfoList里面装的就是所以已安装程序的名字了。是不是很简单?
...全文
175 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

476

社区成员

发帖
与我相关
我的任务
社区描述
其他技术讨论专区
其他 技术论坛(原bbs)
社区管理员
  • 其他技术讨论专区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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