自己写的读取注册表判断主机安装了哪些浏览器

BOOL fIsBrowser(std::string& paraStrBrowser)
{// 判断是否是浏览器

	if (std::string::npos != paraStrBrowser.find("Opera"))
	{
		paraStrBrowser = "Opera" ;
		return TRUE ;
	}
	else if (std::string::npos != paraStrBrowser.find("Internet Explorer"))
	{
		paraStrBrowser = "IE" ;
		return TRUE ;
	}
	else if (std::string::npos != paraStrBrowser.find("Firefox"))
	{
		paraStrBrowser = "Firefox" ;
		return TRUE ;
	}
	else if (std::string::npos != paraStrBrowser.find("Safari"))
	{
		paraStrBrowser = "Safari" ;
		return TRUE ;
	}
	else if (std::string::npos != paraStrBrowser.find("Tencent Traveler"))
	{
		paraStrBrowser = "腾讯TT" ;
		return TRUE ;
	}
	else if (std::string::npos != paraStrBrowser.find("搜狗高速浏览器"))
	{
		paraStrBrowser = "Sogo" ;
		return TRUE ;
	}
	else if (std::string::npos != paraStrBrowser.find("傲游"))
	{
		paraStrBrowser = "傲游" ;
		return TRUE ;
	}
	else if (std::string::npos != paraStrBrowser.find("360安全浏览器"))
	{
		paraStrBrowser = "360" ;
		return TRUE ;
	}
	else if (std::string::npos != paraStrBrowser.find("Chrome"))
	{
		paraStrBrowser = "Chrome" ;
		return TRUE ;
	}

	paraStrBrowser.erase() ;
	return FALSE ;
}

std::string strGetSubKeyValue(std::string& paraStrRegPath)
{
	HKEY hKey;
	long lRet = RegOpenKeyEx(HKEY_LOCAL_MACHINE, paraStrRegPath.c_str(), 0, KEY_READ,&hKey);
	if (0 != lRet)
	{
		MessageBox(NULL, "从注册表中获取浏览器名称失败", "Error", MB_OK) ;
		exit(1) ;
	}

	int		dwIndex = 0 ; 
	char	szValueName[MAX_PATH] = {0} ; 
	DWORD	dwValueVameLen = MAX_PATH ; 
	DWORD	dwType; 
	union
	{
		BYTE data[1024]; 
		DWORD idata; 
	}lpdata; 
	DWORD dwDataLen = sizeof(lpdata); 
	DWORD Type ;
	memset(&lpdata, 0, sizeof(lpdata)); 
	while(RegEnumValue(hKey, dwIndex, (LPTSTR)szValueName, &dwValueVameLen, 0, &Type, lpdata.data, &dwDataLen) != ERROR_NO_MORE_ITEMS) 
	{ 
		if (!strcmp(szValueName, "DisplayName"))
		{// 相等看其Value是否是浏览器

			std::string strTemp((char*)lpdata.data) ;
			if (fIsBrowser(strTemp))
			{// 如果是的话,那么在函数内部做处理,然后返回
				return strTemp ;
			}
			else
			{
				return "" ;
			}
		}

		dwIndex++; 
		dwValueVameLen  =   sizeof(szValueName); 
		dwDataLen		=   sizeof(lpdata); 
		memset(&lpdata, 0, sizeof(lpdata)); 
	}

	RegCloseKey(hKey) ;

	return "" ;
}

vector<pair<std::string, float>> vecGetBrowser()
{
	vector<pair<std::string, float>> retVecBrowser ;

	const int MAX_KEY_LENGTH = 255 ;
	const int MAX_VALUE_NAME = 16383 ;

	std::string strRegPath("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\") ;

	// 读取注册表前期工作
	HKEY hKey ;
	if (0 != RegOpenKeyEx(HKEY_LOCAL_MACHINE, strRegPath.c_str(), 0, KEY_READ, &hKey))
	{
		MessageBox(NULL, "从注册表获取浏览器记录失败", "Error", MB_OK) ;
		exit(1) ;
	}

	// 开始遍历指定注册Key的Subkey
	DWORD dwCntSubKeys = 0 ;
	if(RegQueryInfoKey(hKey, NULL, NULL, NULL, &dwCntSubKeys, NULL, NULL, NULL, NULL, NULL, NULL, NULL))
	{
		MessageBox(NULL, "从注册表获取浏览器记录失败", "Error", MB_OK) ;
		exit(1) ;
	}

	if (!dwCntSubKeys)
	{
		return retVecBrowser ;
	}

	char			szKey[MAX_KEY_LENGTH] = {0} ;
	DWORD			dwKeyLength = MAX_KEY_LENGTH ;
	std::string		strTmp("") ;
	std::string		strRegPathTmp("") ;
	for (int i = 0; i < dwCntSubKeys; ++i)
	{
		memset(szKey, 0 ,MAX_KEY_LENGTH) ;
		dwKeyLength = MAX_KEY_LENGTH ;
		//DWORD n1 = RegEnumKeyEx(hKey, i, szKey, &dwKeyLength, NULL, NULL, NULL, NULL) ;
		if (RegEnumKeyEx(hKey, i, szKey, &dwKeyLength, NULL, NULL, NULL, NULL))
		{
			MessageBox(NULL, "从注册表获取浏览器记录失败", "Error", MB_OK) ;
			exit(1) ;
		}
		else
		{
			// 制造SubKey的Reg路径
			strRegPathTmp = strRegPath ;
			strRegPathTmp += szKey ;
			strRegPathTmp += "\\" ;

			// 获取SubKey的Value,指定要浏览器名称
			strTmp = strGetSubKeyValue(strRegPathTmp) ;
			if (!strTmp.empty())
			{	
				pair<std::string, float> pairTemp ;
				pairTemp.first	= strTmp ;
				pairTemp.second = 0 ;

				// 首先判断该浏览器是否在,不在才加进去
				if (retVecBrowser.end() == find(retVecBrowser.begin(), retVecBrowser.end(), pairTemp))
				{
					retVecBrowser.push_back(pairTemp) ;
				}
			}
		}
	}

	RegCloseKey(hKey) ;

	return retVecBrowser ;
}
因为有些软件 不是安装在 HKEY_lOACAL_MACHINES下面,而是安在: HKEY_UERS\S-1-5-21-*-500\Software\Microsoft\Windows\CurrentVersion\Uninstall\下面,下面贴出更新后完整的代码:
|
BOOL fIsBrowser(std::string& paraStrBrowser)
{// 判断是否是浏览器

	if (std::string::npos != paraStrBrowser.find("Opera"))
	{
		paraStrBrowser = "Opera" ;
		return TRUE ;
	}
	else if (std::string::npos != paraStrBrowser.find("Internet Explorer"))
	{
		paraStrBrowser = "IE" ;
		return TRUE ;
	}
	else if (std::string::npos != paraStrBrowser.find("Firefox"))
	{
		paraStrBrowser = "Firefox" ;
		return TRUE ;
	}
	else if (std::string::npos != paraStrBrowser.find("Safari"))
	{
		paraStrBrowser = "Safari" ;
		return TRUE ;
	}
	else if (std::string::npos != paraStrBrowser.find("Tencent Traveler"))
	{
		paraStrBrowser = "腾讯TT" ;
		return TRUE ;
	}
	else if (std::string::npos != paraStrBrowser.find("搜狗高速浏览器"))
	{
		paraStrBrowser = "Sogo" ;
		return TRUE ;
	}
	else if (std::string::npos != paraStrBrowser.find("傲游"))
	{
		paraStrBrowser = "傲游" ;
		return TRUE ;
	}
	else if (std::string::npos != paraStrBrowser.find("360极速浏览器"))
	{
		paraStrBrowser = "360" ;
		return TRUE ;
	}
	else if (std::string::npos != paraStrBrowser.find("Chrome"))
	{
		paraStrBrowser = "Chrome" ;
		return TRUE ;
	}

	paraStrBrowser.erase() ;
	return FALSE ;
}

std::string strGetSubKeyValue(HKEY paraHKey, std::string& paraStrRegPath)
{
	HKEY hKey;
	long lRet = RegOpenKeyEx(paraHKey, paraStrRegPath.c_str(), 0, KEY_READ,&hKey);
	if (0 != lRet)
	{
		MessageBox(NULL, "从注册表中获取浏览器名称失败", "Error", MB_OK) ;
		exit(1) ;
	}

	int		dwIndex = 0 ; 
	char	szValueName[MAX_PATH] = {0} ; 
	DWORD	dwValueVameLen = MAX_PATH ; 
	DWORD	dwType; 
	union
	{
		BYTE data[1024]; 
		DWORD idata; 
	}lpdata; 
	DWORD dwDataLen = sizeof(lpdata); 
	DWORD Type ;
	memset(&lpdata, 0, sizeof(lpdata)); 
	while(RegEnumValue(hKey, dwIndex, (LPTSTR)szValueName, &dwValueVameLen, 0, &Type, lpdata.data, &dwDataLen) != ERROR_NO_MORE_ITEMS) 
	{ 
		if (!strcmp(szValueName, "DisplayName"))
		{// 相等看其Value是否是浏览器

			std::string strTemp((char*)lpdata.data) ;
			if (fIsBrowser(strTemp))
			{// 如果是的话,那么在函数内部做处理,然后返回
				return strTemp ;
			}
			else
			{
				return "" ;
			}
		}

		dwIndex++; 
		dwValueVameLen  =   sizeof(szValueName); 
		dwDataLen		=   sizeof(lpdata); 
		memset(&lpdata, 0, sizeof(lpdata)); 
	}

	RegCloseKey(hKey) ;

	return "" ;
}

std::string& strGetS_1_5_21Path(std::string& paraStrPath)
{
	const int MAX_KEY_LENGTH = 255 ;
	const int MAX_VALUE_NAME = 16383 ;

	HKEY hKey ;
	if (0 != RegOpenKeyEx(HKEY_USERS, NULL, 0, KEY_READ, &hKey))
	{
		MessageBox(NULL, "从注册表获取浏览器记录失败", "Error", MB_OK) ;
		exit(1) ;
	}

	DWORD dwCntSubKeys = 0 ;
	if(RegQueryInfoKey(hKey, NULL, NULL, NULL, &dwCntSubKeys, NULL, NULL, NULL, NULL, NULL, NULL, NULL))
	{
		MessageBox(NULL, "从注册表获取浏览器记录失败", "Error", MB_OK) ;
		exit(1) ;
	}

	char			szKey[MAX_KEY_LENGTH] = {0} ;
	DWORD			dwKeyLength = MAX_KEY_LENGTH ;
	for (int i = 0; i < dwCntSubKeys; ++i)
	{
		memset(szKey, 0 ,MAX_KEY_LENGTH) ;
		dwKeyLength = MAX_KEY_LENGTH ;
		//DWORD n1 = RegEnumKeyEx(hKey, i, szKey, &dwKeyLength, NULL, NULL, NULL, NULL) ;
		if (RegEnumKeyEx(hKey, i, szKey, &dwKeyLength, NULL, NULL, NULL, NULL))
		{
			MessageBox(NULL, "从注册表获取浏览器记录失败", "Error", MB_OK) ;
			exit(1) ;
		}
		else
		{
			// 制造SubKey的Reg路径
			paraStrPath = szKey ;
			if (std::string::npos != paraStrPath.find("S-1-5-21-") && std::string::npos == paraStrPath.find("_Classes"))
			{
				paraStrPath += "\\Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\" ;
				return paraStrPath ;
			}
		}
	}

	return paraStrPath ;
}

vector<pair<std::string, float>>& vecGetBrowser(HKEY hKeyRoot, HKEY& hKey, const std::string& strRegPath, vector<pair<std::string, float>>& retVecBrowser)
{
	//vector<pair<std::string, float>> retVecBrowser ;

	const int MAX_KEY_LENGTH = 255 ;
	const int MAX_VALUE_NAME = 16383 ;

	//std::string strRegPath("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\") ;

	// 读取注册表前期工作
	//HKEY hKey ;
	if (0 != RegOpenKeyEx(hKeyRoot, strRegPath.c_str(), 0, KEY_READ, &hKey))
	{
		MessageBox(NULL, "从注册表获取浏览器记录失败", "Error", MB_OK) ;
		exit(1) ;
	}

	// 开始遍历指定注册Key的Subkey
	DWORD dwCntSubKeys = 0 ;
	if(RegQueryInfoKey(hKey, NULL, NULL, NULL, &dwCntSubKeys, NULL, NULL, NULL, NULL, NULL, NULL, NULL))
	{
		MessageBox(NULL, "从注册表获取浏览器记录失败", "Error", MB_OK) ;
		exit(1) ;
	}

	if (!dwCntSubKeys)
	{
		return retVecBrowser ;
	}

	char			szKey[MAX_KEY_LENGTH] = {0} ;
	DWORD			dwKeyLength = MAX_KEY_LENGTH ;
	std::string		strTmp("") ;
	std::string		strRegPathTmp("") ;
	for (int i = 0; i < dwCntSubKeys; ++i)
	{
		memset(szKey, 0 ,MAX_KEY_LENGTH) ;
		dwKeyLength = MAX_KEY_LENGTH ;
		//DWORD n1 = RegEnumKeyEx(hKey, i, szKey, &dwKeyLength, NULL, NULL, NULL, NULL) ;
		if (RegEnumKeyEx(hKey, i, szKey, &dwKeyLength, NULL, NULL, NULL, NULL))
		{
			MessageBox(NULL, "从注册表获取浏览器记录失败", "Error", MB_OK) ;
			exit(1) ;
		}
		else
		{
			// 制造SubKey的Reg路径
			strRegPathTmp = strRegPath ;
			strRegPathTmp += szKey ;
			strRegPathTmp += "\\" ;

			// 获取SubKey的Value,指定要浏览器名称
			strTmp = strGetSubKeyValue(hKeyRoot, strRegPathTmp) ;
			if (!strTmp.empty())
			{	
				pair<std::string, float> pairTemp ;
				pairTemp.first	= strTmp ;
				pairTemp.second = 0 ;

				// 首先判断该浏览器是否在,不在才加进去
				if (retVecBrowser.end() == find(retVecBrowser.begin(), retVecBrowser.end(), pairTemp))
				{
					retVecBrowser.push_back(pairTemp) ;
				}
			}
		}
	}

	return retVecBrowser ;
}

void vCaculateAverage(vector<pair<std::string, float>>& retVecBrowser)
{
	for (int i = 0; i < retVecBrowser.size(); ++i)
	{
		retVecBrowser[i].second = float(1) / retVecBrowser.size() ;
	}
}
// 获取浏览器种类名称
	std::string strPath("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\") ;
	vecGetBrowser(HKEY_LOCAL_MACHINE, hKey, strPath, pBrowser) ;
	std::string strS_1_5_21Path("") ;
	vecGetBrowser(HKEY_USERS, hKey, strGetS_1_5_21Path(strS_1_5_21Path), pBrowser) ;
	vCaculateAverage(pBrowser) ;


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
什么是cookies呢,Cookies是一个储存于浏览器目录中的文本文件,记录你访问一个特定站点的信息,且只能被创建这个Cookies的站点读回,约由255个字符组成,仅占4KB硬盘空间。当用户正在浏览某站点时,它储存于用户机的随机存取存储器RAM中,退出浏览器后,它储存于用户的硬盘中。储存Cookies中的大部分信息是普通的,如当你浏览一个站点时,此文件记录了每一次的击键信息和被访站点的地址等。但是许多Web站点使用Cookies来储存针对私人的数据,如:注册口令、用户名、信用卡编号等,即所谓的"追踪cookies",危害绝不亚于木马。 Cookies中的内容大多数经过了加密处理,因此一般用户看来只是一些毫无意义的字母数字组合,只有服务器的CGI处理程序才知道它们真正的含义。 软件简介: IECookiesView是一个专门用来查看IECookies内容的工具, 它可以帮你搜寻并显示出你计算机中所有Cookies档案的数据,包括是哪一个网站入Cookies的,内容有什么,入的时间日期及此Cookies的有效期限等等资料。 你是否常常怀疑一些网站入Cookies内容到你的计算机中是否会对你造成隐私的侵犯?使用本软件就能知道这些Cookies的内容都是些什么,如此这般,你心里就有底了,就该怎么做了。 此软件只对IE浏览器的Cookies有效,而且多多少少有刺探隐私的"嫌疑",所以,个别灵敏度高的杀毒软件会报毒,请留意!
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值