简介本文介绍C++中注册表相关操作总结,主要有写入注册表、读取注册表,感兴趣的朋友可以参考一下。

写注册表

// 写注册表
bool WriteRegedit(LPCTSTR m_path, LPCTSTR m_name, CString strParame)
{
	bool flag = false;
	HKEY hKEY;
	if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, m_path, NULL, KEY_WRITE, &hKEY) == ERROR_SUCCESS)// 如果无法打开hKEY,则中止程序的执行  
	{
		RegSetValueEx(hKEY, m_name, NULL, REG_SZ, (BYTE*)strParame.GetBuffer(strParame.GetLength()), 2 * strParame.GetLength());
		strParame.ReleaseBuffer();
		flag = true;
		RegCloseKey(hKEY);
	}
	else
	{
		RegCreateKeyEx(HKEY_LOCAL_MACHINE, (LPCTSTR)m_path, 0, NULL, NULL, KEY_WRITE, NULL, &hKEY, NULL);
		RegSetValueEx(hKEY, m_name, NULL, REG_SZ, (BYTE*)strParame.GetBuffer(strParame.GetLength()), 2 * strParame.GetLength());
		strParame.ReleaseBuffer();
		flag = true;
		RegCloseKey(hKEY);
	}
	return flag;
}

读注册表

// 读注册表
CString GetRegValue(HKEY hKeyType, DWORD dwType, LPCTSTR lpPath, LPCTSTR lpName)
{
	HKEY hKEY;
	DWORD dataSize = MAX_PATH;
	char data[MAX_PATH];
	std::string strValue("");
	if (RegOpenKeyEx(hKeyType, lpPath, NULL, KEY_READ, &hKEY) == ERROR_SUCCESS)// 如果无法打开hKEY,则中止程序的执行  
	{
		long lRet = RegQueryValueEx(hKEY, lpName, NULL, &dwType, (LPBYTE)data, &dataSize);
		if (lRet == ERROR_SUCCESS)
		{
			for (int i = 0; i < (int)dataSize; i++)
			{
				strValue = strValue + data[i];
			}
		}
		RegCloseKey(hKEY);        // 程序结束前要关闭已经打开的 hKEY。
	}
	else
	{
		RegCreateKeyEx(hKeyType, (LPCTSTR)lpPath, 0, NULL, NULL, KEY_WRITE, NULL, &hKEY, NULL);
		RegCloseKey(hKEY);        // 程序结束前要关闭已经打开的 hKEY。
	}
	std::wstring wstrValue((wchar_t*)strValue.data(), strValue.length() / 2);
	return wstrValue.c_str();
}


更多为你推荐