1. 程式人生 > >VC登錄檔寫入和讀取字串

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);
}