一些实用的注册表封装类

头文件"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
};


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,HKEY
base)
{
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,HKEY
base)
{
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,HKEY
base)
{
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,HKEY
base)
{
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,HKEY
base)
{
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,HKEY
base)
{
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();
}

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值