浅谈:利用QSettings来获取windows已安装程序名字列表的方法
这个问题困扰了我两个小时,最开始我以为必须要调用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里面装的就是所以已安装程序的名字了。是不是很简单?