栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

修改注册表的值

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

修改注册表的值

#include
#include 
#include 
#include 
#include 
#include 
#include 
#include "shellapi.h"
#include 
#include 
#include
#include 
#include 
#include 
#include
#include 
#include 



using namespace std;
#pragma warning(disable:4996)
#pragma comment(lib, "oleaut32.lib")
#pragma comment(lib, "VERSION.lib")
#pragma comment(lib, "crypt32.lib")
#define ENCODING (X509_ASN_ENCODING | PKCS_7_ASN_ENCODING)




int WChar2AChar(const WCHAR* lpstr, char** pOut, UINT type)
{
	int count = wcslen(lpstr);
	if (pOut == NULL || count == 0)
		return 0;

	int nACharCount = ::WideCharToMultiByte(type, 0, lpstr, -1, NULL, 0, NULL, NULL);
	*pOut = new char[nACharCount];
	memset(*pOut, 0, sizeof(char) * (nACharCount));

	int result = ::WideCharToMultiByte(type, 0, lpstr, -1, *pOut, nACharCount, NULL, NULL);

	if (*pOut == NULL || result > nACharCount)
	{
		return 0;
	}

	return nACharCount;
}
CString string2CString(std::string csStrData)
{
	int lengthOfWcs1 = MultiByteToWideChar(CP_UTF8, 0, csStrData.c_str(), -1, NULL, 0);
	wchar_t* wcs1 = new wchar_t[lengthOfWcs1 + 1];
	MultiByteToWideChar(CP_UTF8, 0, csStrData.c_str(), -1, wcs1, lengthOfWcs1);

	char* pOut = nullptr;
	int n = WChar2AChar(wcs1, &pOut, CP_ACP);
	if (pOut)
	{
		CString strRet(pOut);
		delete[] wcs1;
		wcs1 = NULL;
		delete[] pOut;
		pOut = nullptr;
		return strRet;
	}


	delete[] wcs1;
	wcs1 = NULL;

	return "";
}
std::string CString2string(CString csStrData)
{
	int lengthOfWcs1 = MultiByteToWideChar(CP_ACP, 0, csStrData, -1, NULL, 0);
	wchar_t* wcs1 = new wchar_t[lengthOfWcs1 + 1];
	MultiByteToWideChar(CP_ACP, 0, csStrData, -1, wcs1, lengthOfWcs1);

	char* pOut = nullptr;
	int n = WChar2AChar(wcs1, &pOut, CP_UTF8);
	if (pOut)
	{
		std::string strRet = std::string(pOut);
		delete[] wcs1;
		wcs1 = NULL;
		delete[] pOut;
		pOut = nullptr;
		return strRet;
	}


	delete[] wcs1;
	wcs1 = NULL;

	return "";
}


bool SetRegeditValue(std::string load, int Judge,std::string key,std::string value)
{
	HKEY hKEY;
	HKEY hKEYResult;
	HKEY newKEY;

	char dtchData[512];//存储字符串
	DWORD etchData = 0;//存储数字
	DWORD dwValueType;

	long lRet;//记录函数的返回值方便调试
	DWORD dwSize;

	DWORD dwType = REG_DWORD;
	TCHAR szKeyName[255] = { 0 };// 注册表项名称
	DWORD index = 0;
	DWORD dwKeyLen = 255;
	std::string strBuffer;
	std::string  strMidReg;
	int ret = -1;


	std::string data_Set;//示例的注册表操作路径
	data_Set += load;
	if (Judge == 1) {
		lRet = RegOpenKeyExA(HKEY_LOCAL_MACHINE, data_Set.c_str(), 0, KEY_WOW64_64KEY | KEY_READ, &hKEY);
	}
	else {
		lRet = RegOpenKeyExA(HKEY_CURRENT_USER, data_Set.c_str(), 0, KEY_WOW64_64KEY | KEY_READ, &hKEY);
	}

	if (ERROR_SUCCESS == lRet) {

		while (ERROR_NO_MORE_ITEMS != RegEnumKeyEx(hKEY, index, szKeyName, &dwKeyLen, 0, NULL, NULL, NULL)) {
			index++;
			strBuffer += CString2string(szKeyName);

			if (!strBuffer.empty())
			{
				long temp = -1;
				strMidReg += data_Set;
				strMidReg += "\";
				strMidReg += strBuffer;

				strMidReg = string2CString(strMidReg);
				//printf("strMidReg  %sn", strMidReg);

				if (Judge == 1) {
					temp = RegOpenKeyExA(HKEY_LOCAL_MACHINE, strMidReg.c_str(), 0, KEY_WOW64_64KEY | KEY_READ, &hKEYResult);
				}
				else {
					temp = RegOpenKeyExA(HKEY_CURRENT_USER, strMidReg.c_str(), 0, KEY_WOW64_64KEY | KEY_READ, &hKEYResult);
				}

				if (temp == ERROR_SUCCESS)
				{
					
					//DisplayIcon
					dwSize = 512;
					RegQueryValueExA(hKEYResult, "DisplayIcon", 0, &dwValueType, (LPBYTE)dtchData, &dwSize);
					
					std::string dispalyIcon;
					dispalyIcon += dtchData;
					int pos = dispalyIcon.rfind('\');
					dispalyIcon = dispalyIcon.substr(pos + 1, dispalyIcon.length());

					if (dispalyIcon == "ZeroTrustSecureClient.exe")
					{
						//重新打开
						if (Judge == 1) {
							RegOpenKeyExA(HKEY_LOCAL_MACHINE, strMidReg.c_str(), 0, KEY_WOW64_64KEY | KEY_SET_VALUE, &newKEY);
						}
						else {
						
							lRet = RegOpenKeyExA(HKEY_CURRENT_USER, data_Set.c_str(), 0, KEY_WOW64_64KEY | KEY_SET_VALUE, &newKEY);
						}
						
						BYTE sValue[256] = {};
						memcpy(sValue,value.c_str(),value.size());
					
						RegSetValueEx(newKEY,//要设置的键的句柄
							key.c_str(),//要访问的键值的名称
							0,//保留值
							dwValueType,//要设置的数据的类型
							sValue,//要设置的健值
							dwSize//数据的长度
						);
					
					}

					memset(dtchData, 0, sizeof(char) * dwSize);

				}

			}
			memset(szKeyName, 0, 255);
			dwKeyLen = 255;
			strMidReg = "";
			strBuffer = "";

		}
	}


	RegCloseKey(hKEY);
	RegCloseKey(hKEYResult);
	RegCloseKey(newKEY);


	return  true;
}



//需要修改displayName、displayVersion、DisplayIcon、Publisher、UninstallString(最后修改displayIcon)
void SetRegeditValue(std::string key, std::string value)
{
	SetRegeditValue("SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall", 1,key,value);
	SetRegeditValue("SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall", 1, key, value);
	SetRegeditValue("SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall", 0, key, value);

}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/698976.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号