近日,关于 QQ和360的争论可谓是相当激烈,360指责QQ通过扫描用户的开始菜单和桌面上的快捷方式,来获取用户本机所安装的软件,根据用户所安装的软件来开发自己的产品,从而打击竞争对手。
对于这点,我表示很怀疑:要获得用户本机安装的软件,何必费这么大劲去扫描用户的开始菜单和桌面上的快捷方式?Windows已经提供了许多实现该方法的函数接口,对于windows程序来说,都可以轻易的获得这些信息,所谓的超级黑名单不知从何而来?
我查了一下,以下是微软提供的一段实现该功能的VBScript代码,操作简单,你可以试一下。
代码来自: http://technet.microsoft.com/zh-cn/library/ee692772.aspx#EDB 中的 问题13
我对它作了稍微修改,使结果输出到了一个文本文件中。
以下是我修改后的代码,将代码复制到一个txt文件中,然后将后缀名改为vbs,双击运行该文件,生成一个Result.txt的结果文件,就是本机已安装的软件列表。
strHost = "." Const HKLM = &H80000002 Set objReg = GetObject("winmgmts://" & strHost & _ "/root/default:StdRegProv") Const strBaseKey = _ "Software/Microsoft/Windows/CurrentVersion/Uninstall/" objReg.EnumKey HKLM, strBaseKey, arrSubKeys Set fso = CreateObject("Scripting.FileSystemObject") '没有文件先创建文件 Set MyFile = fso.CreateTextFile("Result.txt", true) MyFile.Close '写文件内容 Set MyFile = fso.OpenTextFile("Result.txt", 2) For Each strSubKey In arrSubKeys intRet = objReg.GetStringValue(HKLM, strBaseKey & strSubKey, _ "DisplayName", strValue) If intRet <> 0 Then intRet = objReg.GetStringValue(HKLM, strBaseKey & strSubKey, _ "QuietDisplayName", strValue) End If If strValue = "" Then WScript.Echo "ewq" Exit For End If If (strValue <> "") and (intRet = 0) Then 'WScript.Echo strValue MyFile.WriteLine(strValue) On Error Resume Next End If Next WScript.Echo "完毕!" MyFile.Close