头文件"registry.h"
#include
<
string
>
#include < Shlwapi.h >
#include < tchar.h >
/**/ /**
*/ingroupCommonClasses
*Baseclassfortheregistryclasses.
*/
class CRegBase
{
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://members
HKEYm_base;/**////<handletotheregistrybase
HKEYm_hKey;///<handletotheopenregistrykey
CStringm_key;///<thenameofthevalue
CStringm_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();/**////<readsthevaluefromtheregistry
voidwrite();///<writesthevaluetotheregistry
operatorDWORD();
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;/**////<thecachedvalueoftheregistry
DWORDm_defaultvalue;///<thedefaultvaluetouse
BOOLm_read;///<indicatesifthevaluehasalreadybeenreadfromtheregistry
BOOLm_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();/**////<readsthevaluefromtheregistry
voidwrite();///<writesthevaluetotheregistry
operatorCString();
CRegString&operator=(CStrings);
CRegString&operator+=(CStrings){return*this=(CString)*this+s;}
protected:
CStringm_value;/**////<thecachedvalueoftheregistry
CStringm_defaultvalue;///<thedefaultvaluetouse
BOOLm_read;///<indicatesifthevaluehasalreadybeenreadfromtheregistry
BOOLm_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();/**////<readsthevaluefromtheregistry
voidwrite();///<writesthevaluetotheregistry
operatorCRect();
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;/**////<thecachedvalueoftheregistry
CRectm_defaultvalue;///<thedefaultvaluetouse
BOOLm_read;///<indicatesifthevaluehasalreadybeenreadfromtheregistry
BOOLm_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();/**////<writesthevaluetotheregistry
operatorCPoint();
CRegPoint&operator=(CPointp);
CRegPoint&operator+=(CPointp){return*this=p+*this;}
CRegPoint&operator-=(CPointp){return*this=p-*this;}
protected:
CPointm_value;/**////<thecachedvalueoftheregistry
CPointm_defaultvalue;///<thedefaultvaluetouse
BOOLm_read;///<indicatesifthevaluehasalreadybeenreadfromtheregistry
BOOLm_force;///<indicatesifnocacheshouldbeused,i.e.alwaysreadandwritedirectlyfromregistry
};
#endif
typedefstd::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://members
HKEYm_base;/**////<handletotheregistrybase
HKEYm_hKey;///<handletotheopenregistrykey
stdstringm_key;///<thenameofthevalue
stdstringm_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();/**////<readsthevaluefromtheregistry
voidwrite();///<writesthevaluetotheregistry
operatorstdstring();
CRegStdString&operator=(stdstrings);
CRegStdString&operator+=(stdstrings){return*this=(stdstring)*this+s;}
operatorLPCTSTR();
protected:
stdstringm_value;/**////<thecachedvalueoftheregistry
stdstringm_defaultvalue;///<thedefaultvaluetouse
BOOLm_read;///<indicatesifthevaluehasalreadybeenreadfromtheregistry
BOOLm_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();/**////<readsthevaluefromtheregistry
voidwrite();///<writesthevaluetotheregistry
operatorDWORD();
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;/**////<thecachedvalueoftheregistry
DWORDm_defaultvalue;///<thedefaultvaluetouse
BOOLm_read;///<indicatesifthevaluehasalreadybeenreadfromtheregistry
BOOLm_force;///<indicatesifnocacheshouldbeused,i.e.alwaysreadandwritedirectlyfromregistry
};
#include < Shlwapi.h >
#include < tchar.h >
/**/ /**
*/ingroupCommonClasses
*Baseclassfortheregistryclasses.
*/
class CRegBase
{
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://members
HKEYm_base;/**////<handletotheregistrybase
HKEYm_hKey;///<handletotheopenregistrykey
CStringm_key;///<thenameofthevalue
CStringm_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();/**////<readsthevaluefromtheregistry
voidwrite();///<writesthevaluetotheregistry
operatorDWORD();
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;/**////<thecachedvalueoftheregistry
DWORDm_defaultvalue;///<thedefaultvaluetouse
BOOLm_read;///<indicatesifthevaluehasalreadybeenreadfromtheregistry
BOOLm_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();/**////<readsthevaluefromtheregistry
voidwrite();///<writesthevaluetotheregistry
operatorCString();
CRegString&operator=(CStrings);
CRegString&operator+=(CStrings){return*this=(CString)*this+s;}
protected:
CStringm_value;/**////<thecachedvalueoftheregistry
CStringm_defaultvalue;///<thedefaultvaluetouse
BOOLm_read;///<indicatesifthevaluehasalreadybeenreadfromtheregistry
BOOLm_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();/**////<readsthevaluefromtheregistry
voidwrite();///<writesthevaluetotheregistry
operatorCRect();
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;/**////<thecachedvalueoftheregistry
CRectm_defaultvalue;///<thedefaultvaluetouse
BOOLm_read;///<indicatesifthevaluehasalreadybeenreadfromtheregistry
BOOLm_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();/**////<writesthevaluetotheregistry
operatorCPoint();
CRegPoint&operator=(CPointp);
CRegPoint&operator+=(CPointp){return*this=p+*this;}
CRegPoint&operator-=(CPointp){return*this=p-*this;}
protected:
CPointm_value;/**////<thecachedvalueoftheregistry
CPointm_defaultvalue;///<thedefaultvaluetouse
BOOLm_read;///<indicatesifthevaluehasalreadybeenreadfromtheregistry
BOOLm_force;///<indicatesifnocacheshouldbeused,i.e.alwaysreadandwritedirectlyfromregistry
};
#endif
typedefstd::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://members
HKEYm_base;/**////<handletotheregistrybase
HKEYm_hKey;///<handletotheopenregistrykey
stdstringm_key;///<thenameofthevalue
stdstringm_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();/**////<readsthevaluefromtheregistry
voidwrite();///<writesthevaluetotheregistry
operatorstdstring();
CRegStdString&operator=(stdstrings);
CRegStdString&operator+=(stdstrings){return*this=(stdstring)*this+s;}
operatorLPCTSTR();
protected:
stdstringm_value;/**////<thecachedvalueoftheregistry
stdstringm_defaultvalue;///<thedefaultvaluetouse
BOOLm_read;///<indicatesifthevaluehasalreadybeenreadfromtheregistry
BOOLm_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();/**////<readsthevaluefromtheregistry
voidwrite();///<writesthevaluetotheregistry
operatorDWORD();
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;/**////<thecachedvalueoftheregistry
DWORDm_defaultvalue;///<thedefaultvaluetouse
BOOLm_read;///<indicatesifthevaluehasalreadybeenreadfromtheregistry
BOOLm_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,itsthesamevalue
return*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_UNICODE
if(RegSetValueEx(m_hKey,m_key,0,REG_SZ,(BYTE*)(LPCTSTR)m_value,(m_value.GetLength()+1)*2)==ERROR_SUCCESS)
#else
if(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,itsthesamevalue
return*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,itsthesamevalue
return*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,itsthesamevalue
return*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();
else
returnread().c_str();
}
CRegStdString::operatorstdstring()
{
if((m_read)&&(!m_force))
returnm_value;
else
{
returnread();
}
}
CRegStdString&CRegStdString::operator=(stdstrings)
{
if((s==m_value)&&(!m_force))
{
//nowritetotheregistryrequired,itsthesamevalue
return*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();
}
}
<!--<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,itsthesamevalue
return*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_UNICODE
if(RegSetValueEx(m_hKey,m_key,0,REG_SZ,(BYTE*)(LPCTSTR)m_value,(m_value.GetLength()+1)*2)==ERROR_SUCCESS)
#else
if(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,itsthesamevalue
return*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,itsthesamevalue
return*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,itsthesamevalue
return*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();
else
returnread().c_str();
}
CRegStdString::operatorstdstring()
{
if((m_read)&&(!m_force))
returnm_value;
else
{
returnread();
}
}
CRegStdString&CRegStdString::operator=(stdstrings)
{
if((s==m_value)&&(!m_force))
{
//nowritetotheregistryrequired,itsthesamevalue
return*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();
}
}