VC注册表写入和读取字符串

关于注册表读写的文章网上有很多,但是真的要用到的时候发现很难找到直接向注册表读写Cstring字符串的文章
void CTestDlg::WirteREG(void)
{
	int nIndex=1;
	Cstring strr1.Format("%i,%i,%i",1,2,3);
	Cstring strr.Format("CmSet%i",nIndex);
	HKEY hKey = nullptr;
	//创建成功,将得到hKey,一个注册表句柄,用于下面操作注册表
	if (ERROR_SUCCESS != RegCreateKey(HKEY_CURRENT_USER, TEXT("SoftWare\\Test\\set"), &hKey))
	{
		AfxMessageBox(TEXT("创建注册表失败"));
		return;
	}
	//写入注册表                                  //类型  //名称 //字符个数
	//只能写入一个value
	if (ERROR_SUCCESS != RegSetValue(hKey,nullptr,REG_SZ,TEXT("Test"),4))
	{
		AfxMessageBox(TEXT("写入注册表失败"));
		return;
	}
	if (hKey ==nullptr)
	{
		return;
	}
	LONG lRet = 0;

	LPSTR lpPath = (LPSTR)(LPCTSTR)strr1;
	//这个函数可以写入更多的Value                    //名称 //强制为零 //类型        //数据
	if (ERROR_SUCCESS != (lRet = RegSetValueEx(hKey, TEXT(strr), 0, REG_SZ, (CONST BYTE *)lpPath, strr1.GetLength())))
	{
		AfxMessageBox(TEXT("写入注册表失败Ex"));
		return;
	}
	AfxMessageBox(TEXT("写入注册表成功!"));
	RegCloseKey(hKey);
}



void CTestDlg::ReadREG(void)
{
	LONG lValue = 0;
	//先读取数据的长度
	RegQueryValue(HKEY_CURRENT_USER, TEXT("SoftWare\\Test\\set"), nullptr, &lValue);
	TCHAR *pBuf = new TCHAR[lValue];
	RegQueryValue(HKEY_CURRENT_USER, TEXT("SoftWare\\Test\\set"), pBuf, &lValue);
	AfxMessageBox(pBuf);

	HKEY hKey = nullptr;
	DWORD dwTpye = REG_SZ;
	DWORD dwValue = MAX_PATH;//这个大小一定要先求出来,否则会出错(234)
	TCHAR data[MAX_PATH]; 
	LONG lRet = 0;
	//打开注册表
	RegOpenKeyEx(HKEY_CURRENT_USER, TEXT("SoftWare\\CXTest\\set"),0, KEY_ALL_ACCESS,&hKey);
	//RegOpenKey(HKEY_LOCAL_MACHINE, TEXT("SoftWare\\Test"), &hKey);
	//读注册表                                          //valuename      //返回value类型 //数据缓存区 //缓存区大小
	if (ERROR_SUCCESS != (lRet = RegQueryValueEx(hKey, TEXT("CmSet1"), 0, &dwTpye, (LPBYTE)data, &dwValue)))
	{
		AfxMessageBox(TEXT("读取注册表失败!"));
		return;
	}
	AfxMessageBox(TEXT("读取注册表成功!"));
	CString s;
	s.Format(data);
        sscanf(s,"%i,%i",&cc,&xx);
        AfxMessageBox(s);
}




猜你喜欢

转载自blog.csdn.net/mr_sandman1994/article/details/72852067