头文件"registry.h" #include<string>#include<Shlwapi.h>#include<tchar.h>/**//***/ingroupCommonClasses*Baseclassfortheregistryclasses.*/classCRegBase{public://methods/**//***Removesthewholeregistrykeyincludingallvalues.Soifyousettheregistry*entrytobeHKCU/Software/Company/Product/key/valuetherewillonlybe*HKCU/Software/Company/Productkeyintheregistry.*/returnERROR_SUCCESSorannonzeroerrorcode.UseFormatMessage()togetanerrordescription.*/DWORDremoveKey(){RegOpenKeyEx(m_base,m_path,0,KEY_WRITE,&m_hKey);returnSHDeleteKey(m_base,(LPCTSTR)m_path);}/**//***Removesthevalueoftheregistryobject.Ifyousettheregistryentryto*beHKCU/Software/Company/Product/key/valuetherewillonlybe*HKCU/Software/Company/Product/key/intheregistry.*/returnERROR_SUCCESSorannonzeroerrorcode.UseFormatMessage()togetanerrordescription.*/LONGremoveValue(){RegOpenKeyEx(m_base,m_path,0,KEY_WRITE,&m_hKey);returnRegDeleteValue(m_hKey,(LPCTSTR)m_key);}public://membersHKEYm_base;/**////<handletotheregistrybaseHKEYm_hKey;///<handletotheopenregistrykeyCStringm_key;///<thenameofthevalueCStringm_path;///<thepathtothekey};classCRegDWORD:publicCRegBase{public:CRegDWORD(void);/**//***Constructor.*/paramkeythepathtothekey,includingthekey.example:"Software//Company//SubKey//MyValue"*/paramdefthedefaultvalueusedwhenthekeydoesnotexistorareaderroroccured*/paramforcesettoTRUEifnocacheshouldbeused,i.e.alwaysreadandwritedirectlyfrom/toregistry*/parambaseapredefinedbasekeylikeHKEY_LOCAL_MACHINE.seetheSDKdocumentationformoreinformation.*/CRegDWORD(CStringkey,DWORDdef=0,BOOLforce=FALSE,HKEYbase=HKEY_CURRENT_USER);~CRegDWORD(void);/**//***readstheassignedvaluefromtheregistry.Usethismethodonlyifyouthinktheregistry*valuecouldhavebeenalteredwithoutusingtheCRegDWORDobject.*/returnthereadvalue*/DWORDread();/**////<readsthevaluefromtheregistryvoidwrite();///<writesthevaluetotheregistryoperatorDWORD();CRegDWORD&operator=(DWORDd);CRegDWORD&operator+=(DWORDd){return*this=*this+d;}CRegDWORD&operator-=(DWORDd){return*this=*this-d;}CRegDWORD&operator*=(DWORDd){return*this=*this*d;}CRegDWORD&operator/=(DWORDd){return*this=*this/d;}CRegDWORD&operator%=(DWORDd){return*this=*this%d;}CRegDWORD&operator<<=(DWORDd){return*this=*this<<d;}CRegDWORD&operator>>=(DWORDd){return*this=*this>>d;}CRegDWORD&operator&=(DWORDd){return*this=*this&d;}CRegDWORD&operator|=(DWORDd){return*this=*this|d;}CRegDWORD&operator^=(DWORDd){return*this=*this^d;}protected:DWORDm_value;/**////<thecachedvalueoftheregistryDWORDm_defaultvalue;///<thedefaultvaluetouseBOOLm_read;///<indicatesifthevaluehasalreadybeenreadfromtheregistryBOOLm_force;///<indicatesifnocacheshouldbeused,i.e.alwaysreadandwritedirectlyfromregistry};classCRegString:publicCRegBase{public:CRegString();/**//***Constructor.*/paramkeythepathtothekey,includingthekey.example:"Software//Company//SubKey//MyValue"*/paramdefthedefaultvalueusedwhenthekeydoesnotexistorareaderroroccured*/paramforcesettoTRUEifnocacheshouldbeused,i.e.alwaysreadandwritedirectlyfrom/toregistry*/parambaseapredefinedbasekeylikeHKEY_LOCAL_MACHINE.seetheSDKdocumentationformoreinformation.*/CRegString(CStringkey,CStringdef=_T(""),BOOLforce=FALSE,HKEYbase=HKEY_CURRENT_USER);~CRegString(void);CStringread();/**////<readsthevaluefromtheregistryvoidwrite();///<writesthevaluetotheregistryoperatorCString();CRegString&operator=(CStrings);CRegString&operator+=(CStrings){return*this=(CString)*this+s;}protected:CStringm_value;/**////<thecachedvalueoftheregistryCStringm_defaultvalue;///<thedefaultvaluetouseBOOLm_read;///<indicatesifthevaluehasalreadybeenreadfromtheregistryBOOLm_force;///<indicatesifnocacheshouldbeused,i.e.alwaysreadandwritedirectlyfromregistry};classCRegRect:publicCRegBase{public:CRegRect();/**//***Constructor.*/paramkeythepathtothekey,includingthekey.example:"Software//Company//SubKey//MyValue"*/paramdefthedefaultvalueusedwhenthekeydoesnotexistorareaderroroccured*/paramforcesettoTRUEifnocacheshouldbeused,i.e.alwaysreadandwritedirectlyfrom/toregistry*/parambaseapredefinedbasekeylikeHKEY_LOCAL_MACHINE.seetheSDKdocumentationformoreinformation.*/CRegRect(CStringkey,CRectdef=CRect(),BOOLforce=FALSE,HKEYbase=HKEY_CURRENT_USER);~CRegRect(void);CRectread();/**////<readsthevaluefromtheregistryvoidwrite();///<writesthevaluetotheregistryoperatorCRect();operatorLPCRECT(){return(LPCRECT)(CRect)*this;}operatorLPRECT(){return(LPRECT)(CRect)*this;}CRegRect&operator=(CRectr);CRegRect&operator+=(POINTr){return*this=(CRect)*this+r;}CRegRect&operator+=(SIZEr){return*this=(CRect)*this+r;}CRegRect&operator+=(LPCRECTr){return*this=(CRect)*this+r;}CRegRect&operator-=(POINTr){return*this=(CRect)*this-r;}CRegRect&operator-=(SIZEr){return*this=(CRect)*this-r;}CRegRect&operator-=(LPCRECTr){return*this=(CRect)*this-r;}CRegRect&operator&=(CRectr){return*this=r&*this;}CRegRect&operator|=(CRectr){return*this=r|*this;}protected:CRectm_value;/**////<thecachedvalueoftheregistryCRectm_defaultvalue;///<thedefaultvaluetouseBOOLm_read;///<indicatesifthevaluehasalreadybeenreadfromtheregistryBOOLm_force;///<indicatesifnocacheshouldbeused,i.e.alwaysreadandwritedirectlyfromregistry};classCRegPoint:publicCRegBase{public:CRegPoint();/**//***Constructor.*/paramkeythepathtothekey,includingthekey.example:"Software//Company//SubKey//MyValue"*/paramdefthedefaultvalueusedwhenthekeydoesnotexistorareaderroroccured*/paramforcesettoTRUEifnocacheshouldbeused,i.e.alwaysreadandwritedirectlyfrom/toregistry*/parambaseapredefinedbasekeylikeHKEY_LOCAL_MACHINE.seetheSDKdocumentationformoreinformation.*/CRegPoint(CStringkey,CPointdef=CPoint(),BOOLforce=FALSE,HKEYbase=HKEY_CURRENT_USER);~CRegPoint(void);CPointread();voidwrite();/**////<writesthevaluetotheregistryoperatorCPoint();CRegPoint&operator=(CPointp);CRegPoint&operator+=(CPointp){return*this=p+*this;}CRegPoint&operator-=(CPointp){return*this=p-*this;}protected:CPointm_value;/**////<thecachedvalueoftheregistryCPointm_defaultvalue;///<thedefaultvaluetouseBOOLm_read;///<indicatesifthevaluehasalreadybeenreadfromtheregistryBOOLm_force;///<indicatesifnocacheshouldbeused,i.e.alwaysreadandwritedirectlyfromregistry};#endiftypedefstd::basic_string<TCHAR>stdstring;classCRegStdBase{public://methods/**//***Removesthewholeregistrykeyincludingallvalues.Soifyousettheregistry*entrytobeHKCU/Software/Company/Product/key/valuetherewillonlybe*HKCU/Software/Company/Productkeyintheregistry.*/returnERROR_SUCCESSorannonzeroerrorcode.UseFormatMessage()togetanerrordescription.*/DWORDremoveKey(){RegOpenKeyEx(m_base,m_path.c_str(),0,KEY_WRITE,&m_hKey);returnSHDeleteKey(m_base,m_path.c_str());}/**//***Removesthevalueoftheregistryobject.Ifyousettheregistryentryto*beHKCU/Software/Company/Product/key/valuetherewillonlybe*HKCU/Software/Company/Product/key/intheregistry.*/returnERROR_SUCCESSorannonzeroerrorcode.UseFormatMessage()togetanerrordescription.*/LONGremoveValue(){RegOpenKeyEx(m_base,m_path.c_str(),0,KEY_WRITE,&m_hKey);returnRegDeleteValue(m_hKey,m_key.c_str());}public://membersHKEYm_base;/**////<handletotheregistrybaseHKEYm_hKey;///<handletotheopenregistrykeystdstringm_key;///<thenameofthevaluestdstringm_path;///<thepathtothekey};classCRegStdString:publicCRegStdBase{public:CRegStdString();/**//***Constructor.*/paramkeythepathtothekey,includingthekey.example:"Software//Company//SubKey//MyValue"*/paramdefthedefaultvalueusedwhenthekeydoesnotexistorareaderroroccured*/paramforcesettoTRUEifnocacheshouldbeused,i.e.alwaysreadandwritedirectlyfrom/toregistry*/parambaseapredefinedbasekeylikeHKEY_LOCAL_MACHINE.seetheSDKdocumentationformoreinformation.*/CRegStdString(stdstringkey,stdstringdef=_T(""),BOOLforce=FALSE,HKEYbase=HKEY_CURRENT_USER);~CRegStdString(void);stdstringread();/**////<readsthevaluefromtheregistryvoidwrite();///<writesthevaluetotheregistryoperatorstdstring();CRegStdString&operator=(stdstrings);CRegStdString&operator+=(stdstrings){return*this=(stdstring)*this+s;}operatorLPCTSTR();protected:stdstringm_value;/**////<thecachedvalueoftheregistrystdstringm_defaultvalue;///<thedefaultvaluetouseBOOLm_read;///<indicatesifthevaluehasalreadybeenreadfromtheregistryBOOLm_force;///<indicatesifnocacheshouldbeused,i.e.alwaysreadandwritedirectlyfromregistry};classCRegStdWORD:publicCRegStdBase{public:CRegStdWORD();/**//***Constructor.*/paramkeythepathtothekey,includingthekey.example:"Software//Company//SubKey//MyValue"*/paramdefthedefaultvalueusedwhenthekeydoesnotexistorareaderroroccured*/paramforcesettoTRUEifnocacheshouldbeused,i.e.alwaysreadandwritedirectlyfrom/toregistry*/parambaseapredefinedbasekeylikeHKEY_LOCAL_MACHINE.seetheSDKdocumentationformoreinformation.*/CRegStdWORD(stdstringkey,DWORDdef=0,BOOLforce=FALSE,HKEYbase=HKEY_CURRENT_USER);~CRegStdWORD(void);DWORDread();/**////<readsthevaluefromtheregistryvoidwrite();///<writesthevaluetotheregistryoperatorDWORD();CRegStdWORD&operator=(DWORDd);CRegStdWORD&operator+=(DWORDd){return*this=*this+d;}CRegStdWORD&operator-=(DWORDd){return*this=*this-d;}CRegStdWORD&operator*=(DWORDd){return*this=*this*d;}CRegStdWORD&operator/=(DWORDd){return*this=*this/d;}CRegStdWORD&operator%=(DWORDd){return*this=*this%d;}CRegStdWORD&operator<<=(DWORDd){return*this=*this<<d;}CRegStdWORD&operator>>=(DWORDd){return*this=*this>>d;}CRegStdWORD&operator&=(DWORDd){return*this=*this&d;}CRegStdWORD&operator|=(DWORDd){return*this=*this|d;}CRegStdWORD&operator^=(DWORDd){return*this=*this^d;}protected:DWORDm_value;/**////<thecachedvalueoftheregistryDWORDm_defaultvalue;///<thedefaultvaluetouseBOOLm_read;///<indicatesifthevaluehasalreadybeenreadfromtheregistryBOOLm_force;///<indicatesifnocacheshouldbeused,i.e.alwaysreadandwritedirectlyfromregistry}; registry.cpp<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->#include"stdafx.h"#include"registry.h"CRegDWORD::CRegDWORD(void){m_value=0;m_defaultvalue=0;m_key="";m_base=HKEY_CURRENT_USER;m_read=FALSE;m_force=FALSE;}/**//***Constructor.*@paramkeythepathtothekey,includingthekey.example:"Software//Company//SubKey//MyValue"*@paramdefthedefaultvalueusedwhenthekeydoesnotexistorareaderroroccured*@paramforcesettoTRUEifnocacheshouldbeused,i.e.alwaysreadandwritedirectlyfrom/toregistry*@parambaseapredefinedbasekeylikeHKEY_LOCAL_MACHINE.seetheSDKdocumentationformoreinformation.*/CRegDWORD::CRegDWORD(CStringkey,DWORDdef,BOOLforce,HKEYbase){m_value=0;m_defaultvalue=def;m_force=force;m_base=base;m_read=FALSE;key.TrimLeft(_T("//"));m_path=key.Left(key.ReverseFind(_T('//')));m_path.TrimRight(_T("//"));m_key=key.Right(key.GetLength()-key.ReverseFind(_T('//')));m_key.Trim(_T("//"));read();}CRegDWORD::~CRegDWORD(void){//write();}DWORDCRegDWORD::read(){ASSERT(m_key!=_T(""));if(RegOpenKeyEx(m_base,m_path,0,KEY_EXECUTE,&m_hKey)==ERROR_SUCCESS){intsize=sizeof(m_value);DWORDtype;if(RegQueryValueEx(m_hKey,m_key,NULL,&type,(BYTE*)&m_value,(LPDWORD)&size)==ERROR_SUCCESS){ASSERT(type==REG_DWORD);m_read=TRUE;RegCloseKey(m_hKey);returnm_value;}else{RegCloseKey(m_hKey);returnm_defaultvalue;}}returnm_defaultvalue;}voidCRegDWORD::write(){ASSERT(m_key!=_T(""));DWORDdisp;if(RegCreateKeyEx(m_base,m_path,0,_T(""),REG_OPTION_NON_VOLATILE,KEY_WRITE,NULL,&m_hKey,&disp)!=ERROR_SUCCESS){return;}if(RegSetValueEx(m_hKey,m_key,0,REG_DWORD,(constBYTE*)&m_value,sizeof(m_value))==ERROR_SUCCESS){m_read=TRUE;}RegCloseKey(m_hKey);}CRegDWORD::operatorDWORD(){if((m_read)&&(!m_force))returnm_value;else{returnread();}}CRegDWORD&CRegDWORD::operator=(DWORDd){if((d==m_value)&&(!m_force)){//nowritetotheregistryrequired,itsthesamevaluereturn*this;}m_value=d;write();return*this;}/**///////////////////////////////////////////////////////////////////////////////////////////////CRegString::CRegString(void){m_value=_T("");m_defaultvalue=_T("");m_key=_T("");m_base=HKEY_CURRENT_USER;m_read=FALSE;m_force=FALSE;}/**//***Constructor.*@paramkeythepathtothekey,includingthekey.example:"Software//Company//SubKey//MyValue"*@paramdefthedefaultvalueusedwhenthekeydoesnotexistorareaderroroccured*@paramforcesettoTRUEifnocacheshouldbeused,i.e.alwaysreadandwritedirectlyfrom/toregistry*@parambaseapredefinedbasekeylikeHKEY_LOCAL_MACHINE.seetheSDKdocumentationformoreinformation.*/CRegString::CRegString(CStringkey,CStringdef,BOOLforce,HKEYbase){m_value="";m_defaultvalue=def;m_force=force;m_base=base;m_read=FALSE;key.TrimLeft(_T("//"));m_path=key.Left(key.ReverseFind(_T('//')));m_path.TrimRight(_T("//"));m_key=key.Right(key.GetLength()-key.ReverseFind(_T('//')));m_key.Trim(_T("//"));read();}CRegString::~CRegString(void){//write();}CStringCRegString::read(){ASSERT(m_key!=_T(""));if(RegOpenKeyEx(m_base,m_path,0,KEY_EXECUTE,&m_hKey)==ERROR_SUCCESS){intsize=0;DWORDtype;RegQueryValueEx(m_hKey,m_key,NULL,&type,NULL,(LPDWORD)&size);TCHAR*pStr=newTCHAR[size];if(RegQueryValueEx(m_hKey,m_key,NULL,&type,(BYTE*)pStr,(LPDWORD)&size)==ERROR_SUCCESS){m_value=CString(pStr);delete[]pStr;ASSERT(type==REG_SZ);m_read=TRUE;RegCloseKey(m_hKey);returnm_value;}else{delete[]pStr;RegCloseKey(m_hKey);returnm_defaultvalue;}}returnm_defaultvalue;}voidCRegString::write(){ASSERT(m_key!=_T(""));DWORDdisp;if(RegCreateKeyEx(m_base,m_path,0,_T(""),REG_OPTION_NON_VOLATILE,KEY_WRITE,NULL,&m_hKey,&disp)!=ERROR_SUCCESS){return;}#ifdef_UNICODEif(RegSetValueEx(m_hKey,m_key,0,REG_SZ,(BYTE*)(LPCTSTR)m_value,(m_value.GetLength()+1)*2)==ERROR_SUCCESS)#elseif(RegSetValueEx(m_hKey,m_key,0,REG_SZ,(BYTE*)(LPCTSTR)m_value,m_value.GetLength()+1)==ERROR_SUCCESS)#endif{m_read=TRUE;}RegCloseKey(m_hKey);}CRegString::operatorCString(){if((m_read)&&(!m_force))returnm_value;else{returnread();}}CRegString&CRegString::operator=(CStrings){if((s==m_value)&&(!m_force)){//nowritetotheregistryrequired,itsthesamevaluereturn*this;}m_value=s;write();return*this;}/**///////////////////////////////////////////////////////////////////////////////////////////////CRegRect::CRegRect(void){m_value=CRect(0,0,0,0);m_defaultvalue=CRect(0,0,0,0);m_key=_T("");m_base=HKEY_CURRENT_USER;m_read=FALSE;m_force=FALSE;}/**//***Constructor.*@paramkeythepathtothekey,includingthekey.example:"Software//Company//SubKey//MyValue"*@paramdefthedefaultvalueusedwhenthekeydoesnotexistorareaderroroccured*@paramforcesettoTRUEifnocacheshouldbeused,i.e.alwaysreadandwritedirectlyfrom/toregistry*@parambaseapredefinedbasekeylikeHKEY_LOCAL_MACHINE.seetheSDKdocumentationformoreinformation.*/CRegRect::CRegRect(CStringkey,CRectdef,BOOLforce,HKEYbase){m_value=CRect(0,0,0,0);m_defaultvalue=def;m_force=force;m_base=base;m_read=FALSE;key.TrimLeft(_T("//"));m_path=key.Left(key.ReverseFind(_T('//')));m_path.TrimRight(_T("//"));m_key=key.Right(key.GetLength()-key.ReverseFind(_T('//')));m_key.Trim(_T("//"));read();}CRegRect::~CRegRect(void){//write();}CRectCRegRect::read(){ASSERT(m_key!=_T(""));if(RegOpenKeyEx(m_base,m_path,0,KEY_EXECUTE,&m_hKey)==ERROR_SUCCESS){intsize=0;DWORDtype;RegQueryValueEx(m_hKey,m_key,NULL,&type,NULL,(LPDWORD)&size);LPRECTpRect=(LPRECT)newchar[size];if(RegQueryValueEx(m_hKey,m_key,NULL,&type,(BYTE*)pRect,(LPDWORD)&size)==ERROR_SUCCESS){m_value=CRect(pRect);delete[]pRect;ASSERT(type==REG_BINARY);m_read=TRUE;RegCloseKey(m_hKey);returnm_value;}else{delete[]pRect;RegCloseKey(m_hKey);returnm_defaultvalue;}}returnm_defaultvalue;}voidCRegRect::write(){ASSERT(m_key!=_T(""));DWORDdisp;if(RegCreateKeyEx(m_base,m_path,0,_T(""),REG_OPTION_NON_VOLATILE,KEY_WRITE,NULL,&m_hKey,&disp)!=ERROR_SUCCESS){return;}if(RegSetValueEx(m_hKey,m_key,0,REG_BINARY,(BYTE*)(LPRECT)m_value,sizeof(m_value))==ERROR_SUCCESS){m_read=TRUE;}RegCloseKey(m_hKey);}CRegRect::operatorCRect(){if((m_read)&&(!m_force))returnm_value;else{returnread();}}CRegRect&CRegRect::operator=(CRects){if((s==m_value)&&(!m_force)){//nowritetotheregistryrequired,itsthesamevaluereturn*this;}m_value=s;write();return*this;}/**///////////////////////////////////////////////////////////////////////////////////////////////CRegPoint::CRegPoint(void){m_value=CPoint(0,0);m_defaultvalue=CPoint(0,0);m_key="";m_base=HKEY_CURRENT_USER;m_read=FALSE;m_force=FALSE;}/**//***Constructor.*@paramkeythepathtothekey,includingthekey.example:"Software//Company//SubKey//MyValue"*@paramdefthedefaultvalueusedwhenthekeydoesnotexistorareaderroroccured*@paramforcesettoTRUEifnocacheshouldbeused,i.e.alwaysreadandwritedirectlyfrom/toregistry*@parambaseapredefinedbasekeylikeHKEY_LOCAL_MACHINE.seetheSDKdocumentationformoreinformation.*/CRegPoint::CRegPoint(CStringkey,CPointdef,BOOLforce,HKEYbase){m_value=CPoint(0,0);m_defaultvalue=def;m_force=force;m_base=base;m_read=FALSE;key.TrimLeft(_T("//"));m_path=key.Left(key.ReverseFind(_T('//')));m_path.TrimRight(_T("//"));m_key=key.Right(key.GetLength()-key.ReverseFind(_T('//')));m_key.Trim(_T("//"));read();}CRegPoint::~CRegPoint(void){//write();}CPointCRegPoint::read(){ASSERT(m_key!=_T(""));if(RegOpenKeyEx(m_base,m_path,0,KEY_EXECUTE,&m_hKey)==ERROR_SUCCESS){intsize=0;DWORDtype;RegQueryValueEx(m_hKey,m_key,NULL,&type,NULL,(LPDWORD)&size);POINT*pPoint=(POINT*)newchar[size];if(RegQueryValueEx(m_hKey,m_key,NULL,&type,(BYTE*)pPoint,(LPDWORD)&size)==ERROR_SUCCESS){m_value=CPoint(*pPoint);delete[]pPoint;ASSERT(type==REG_BINARY);m_read=TRUE;RegCloseKey(m_hKey);returnm_value;}else{delete[]pPoint;RegCloseKey(m_hKey);returnm_defaultvalue;}}returnm_defaultvalue;}voidCRegPoint::write(){ASSERT(m_key!=_T(""));DWORDdisp;if(RegCreateKeyEx(m_base,m_path,0,_T(""),REG_OPTION_NON_VOLATILE,KEY_WRITE,NULL,&m_hKey,&disp)!=ERROR_SUCCESS){return;}if(RegSetValueEx(m_hKey,m_key,0,REG_BINARY,(BYTE*)(POINT*)&m_value,sizeof(m_value))==ERROR_SUCCESS){m_read=TRUE;}RegCloseKey(m_hKey);}CRegPoint::operatorCPoint(){if((m_read)&&(!m_force))returnm_value;else{returnread();}}CRegPoint&CRegPoint::operator=(CPoints){if((s==m_value)&&(!m_force)){//nowritetotheregistryrequired,itsthesamevaluereturn*this;}m_value=s;write();return*this;}#endif/**//////////////////////////////////////////////////////////////////////CRegStdString::CRegStdString(void){m_value=_T("");m_defaultvalue=_T("");m_key=_T("");m_base=HKEY_CURRENT_USER;m_read=FALSE;m_force=FALSE;}/**//***Constructor.*@paramkeythepathtothekey,includingthekey.example:"Software//Company//SubKey//MyValue"*@paramdefthedefaultvalueusedwhenthekeydoesnotexistorareaderroroccured*@paramforcesettoTRUEifnocacheshouldbeused,i.e.alwaysreadandwritedirectlyfrom/toregistry*@parambaseapredefinedbasekeylikeHKEY_LOCAL_MACHINE.seetheSDKdocumentationformoreinformation.*/CRegStdString::CRegStdString(stdstringkey,stdstringdef,BOOLforce,HKEYbase){m_value=_T("");m_defaultvalue=def;m_force=force;m_base=base;m_read=FALSE;stdstring::size_typepos=key.find_last_of(_T('//'));m_path=key.substr(0,pos);m_key=key.substr(pos+1);read();}CRegStdString::~CRegStdString(void){//write();}stdstringCRegStdString::read(){if(RegOpenKeyEx(m_base,m_path.c_str(),0,KEY_EXECUTE,&m_hKey)==ERROR_SUCCESS){intsize=0;DWORDtype;RegQueryValueEx(m_hKey,m_key.c_str(),NULL,&type,NULL,(LPDWORD)&size);TCHAR*pStr=newTCHAR[size];if(RegQueryValueEx(m_hKey,m_key.c_str(),NULL,&type,(BYTE*)pStr,(LPDWORD)&size)==ERROR_SUCCESS){m_value.assign(pStr);delete[]pStr;m_read=TRUE;RegCloseKey(m_hKey);returnm_value;}else{delete[]pStr;RegCloseKey(m_hKey);returnm_defaultvalue;}}returnm_defaultvalue;}voidCRegStdString::write(){DWORDdisp;if(RegCreateKeyEx(m_base,m_path.c_str(),0,_T(""),REG_OPTION_NON_VOLATILE,KEY_WRITE,NULL,&m_hKey,&disp)!=ERROR_SUCCESS){return;}if(RegSetValueEx(m_hKey,m_key.c_str(),0,REG_SZ,(BYTE*)m_value.c_str(),(DWORD)m_value.size()+1)==ERROR_SUCCESS){m_read=TRUE;}RegCloseKey(m_hKey);}CRegStdString::operatorLPCTSTR(){if((m_read)&&(!m_force))returnm_value.c_str();elsereturnread().c_str();}CRegStdString::operatorstdstring(){if((m_read)&&(!m_force))returnm_value;else{returnread();}}CRegStdString&CRegStdString::operator=(stdstrings){if((s==m_value)&&(!m_force)){//nowritetotheregistryrequired,itsthesamevaluereturn*this;}m_value=s;write();return*this;}/**//////////////////////////////////////////////////////////////////////CRegStdWORD::CRegStdWORD(void){m_value=0;m_defaultvalue=0;m_key=_T("");m_base=HKEY_CURRENT_USER;m_read=FALSE;m_force=FALSE;}/**//***Constructor.*@paramkeythepathtothekey,includingthekey.example:"Software//Company//SubKey//MyValue"*@paramdefthedefaultvalueusedwhenthekeydoesnotexistorareaderroroccured*@paramforcesettoTRUEifnocacheshouldbeused,i.e.alwaysreadandwritedirectlyfrom/toregistry*@parambaseapredefinedbasekeylikeHKEY_LOCAL_MACHINE.seetheSDKdocumentationformoreinformation.*/CRegStdWORD::CRegStdWORD(stdstringkey,DWORDdef,BOOLforce,HKEYbase){m_value=0;m_defaultvalue=def;m_force=force;m_base=base;m_read=FALSE;stdstring::size_typepos=key.find_last_of(_T('//'));m_path=key.substr(0,pos);m_key=key.substr(pos+1);read();}CRegStdWORD::~CRegStdWORD(void){//write();}DWORDCRegStdWORD::read(){if(RegOpenKeyEx(m_base,m_path.c_str(),0,KEY_EXECUTE,&m_hKey)==ERROR_SUCCESS){intsize=sizeof(m_value);DWORDtype;if(RegQueryValueEx(m_hKey,m_key.c_str(),NULL,&type,(BYTE*)&m_value,(LPDWORD)&size)==ERROR_SUCCESS){m_read=TRUE;RegCloseKey(m_hKey);returnm_value;}else{RegCloseKey(m_hKey);returnm_defaultvalue;}}returnm_defaultvalue;}voidCRegStdWORD::write(){DWORDdisp;if(RegCreateKeyEx(m_base,m_path.c_str(),0,_T(""),REG_OPTION_NON_VOLATILE,KEY_WRITE,NULL,&m_hKey,&disp)!=ERROR_SUCCESS){return;}if(RegSetValueEx(m_hKey,m_key.c_str(),0,REG_DWORD,(constBYTE*)&m_value,sizeof(m_value))==ERROR_SUCCESS){m_read=TRUE;}RegCloseKey(m_hKey);}CRegStdWORD::operatorDWORD(){if((m_read)&&(!m_force))returnm_value;else{returnread();}}