判断是否安装360 不需要扫描硬盘

引用【可牛科技CEO傅盛http://t.qq.com/keniufusheng】腾讯微博原文“扫盲一下:要知道你装了什么软件,无需扫描硬盘,调用windows的一个系统函数即可,这是windows提供的标准程序接口。”

某不才,小小研究了下,现将研究源码以及结果公示于各位:

以下为源代码 感兴趣的各位可以自己输入验证:

#include <Windows.h>
#include <iostream>
#include <string>

void main()
{
 std::string strKey("SOFTWARE//Microsoft//Windows//CurrentVersion//Uninstall//");
 HKEY hKey = NULL;
 if (ERROR_SUCCESS == RegOpenKeyEx(HKEY_LOCAL_MACHINE, strKey.c_str(), 0, KEY_READ, &hKey))
 {
  char szName[_MAX_PATH] = {0};
  DWORD dwNameSize = _MAX_PATH;
  int nIdx = 0;
  while (ERROR_SUCCESS == RegEnumKeyEx(hKey, nIdx, szName, &dwNameSize, NULL, NULL, NULL, NULL))
  {
   HKEY hSubKey = NULL;
   DWORD dwDataSize =_MAX_FNAME;
   char szData[_MAX_FNAME] = {0};
   if (ERROR_SUCCESS == RegOpenKeyEx(HKEY_LOCAL_MACHINE, (strKey+szName).c_str(), 0, KEY_READ, &hSubKey)
    && ERROR_SUCCESS == RegQueryValueEx(hSubKey, "DisplayName", NULL, NULL, (LPBYTE)szData, &dwDataSize))
   {
    std::cout<<szData<<std::endl;
    RegCloseKey(hSubKey);
   }

   ++nIdx;
   dwNameSize = _MAX_PATH;
  }

  RegCloseKey(hKey);
 }

 std::cout<<"/n ==================================================";
 std::cout<<"/n|       事实证明,获取安装程序不需要扫描硬盘!      |";
 std::cout<<"/n|          by 宝宝 xrgb.studio@gmail.com           |";
 std::cout<<"/n ==================================================/n";
 system("pause");
}

 

以下为结果,枚举了系统安装过的软件:

 

开发以及运行环境:

OS : Wnidows 7 Ultimate

IDE: Microsoft Visual Studio 2008(English)

 

基本原理为:

读取注册表unistall子键 并且枚举就可以得知 并不是扫描硬盘

玩过注册表的同学可以查看该项:HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/Uninstall/

这里就是软件安装/卸载列表,选中其中某项 查看其详细信息。

  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 21
    评论
评论 21
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值