📄 registry.h
字号:
#pragma once
#ifndef __AFXWIN_H__
#error include 'stdafx.h' before including this file for PCH
#endif
/**
* DWORD value in registry. with this class you can use DWORD values in registry
* like normal DWORD variables in your program.
* Usage:
* in your header file, declare your registry DWORD variable:
* \code
* CRegDWORD regvalue;
* \endcode
* next initialize the variable e.g. in the constructor of your class:
* \code
* regvalue = CRegDWORD("Software\\Company\\SubKey\\MyValue", 100);
* \endcode
* this will set the registry value "MyValue" under HKEY_CURRENT_USER with path
* "Software\Company\SubKey" to the variable. If the key does not yet exist or
* an error occured during read from the registry, a default
* value of 100 is used when accessing the variable.
* now the variable can be used like any other DWORD variable:
* \code
* regvalue = 200; //stores the value 200 in the registry
* int temp = regvalue + 300; //temp has value 500 now
* regvalue += 300; //now the registry has the value 500 too
* \endcode
* to avoid too much access to the registry the value is cached inside the object.
* once the value is read, no more read accesses to the registry will be made.
* this means the variable will contain a wrong value if the corresponding registry
* entry is changed by anything else than this variable! If you think that could happen
* then use
* \code
* regvalue.read();
* \endcode
* to force a refresh of the variable with the registry.
* a write to the registry is only made if the new value assigned with the variable
* is different than the last assigned value.
* to force a write use the method write();
* another option to force reads and writes to the registry is to specify TRUE as the
* third parameter in the constructor.
*/
class CRegDWORD
{
public:
CRegDWORD(void);
/**
* Constructor.
* @param key the path to the key, including the key. example: "Software\\Company\\SubKey\\MyValue"
* @param def the default value used when the key does not exist or a read error occured
* @param force set to TRUE if no cache should be used, i.e. always read and write directly from/to registry
* @param base a predefined base key like HKEY_LOCAL_MACHINE. see the SDK documentation for more information.
*/
CRegDWORD(CString key, DWORD def = 0, BOOL force = FALSE, HKEY base = HKEY_CURRENT_USER);
~CRegDWORD(void);
/**
* reads the assigned value from the registry. Use this method only if you think the registry
* value could have been altered without using the CRegDWORD object.
* @return the read value
*/
DWORD read(); ///< reads the value from the registry
void write(); ///< writes the value to the registry
operator DWORD();
CRegDWORD& operator=(DWORD d);
CRegDWORD& operator+=(DWORD d) { return *this = *this + d;}
CRegDWORD& operator-=(DWORD d) { return *this = *this - d;}
CRegDWORD& operator*=(DWORD d) { return *this = *this * d;}
CRegDWORD& operator/=(DWORD d) { return *this = *this / d;}
CRegDWORD& operator%=(DWORD d) { return *this = *this % d;}
CRegDWORD& operator<<=(DWORD d) { return *this = *this << d;}
CRegDWORD& operator>>=(DWORD d) { return *this = *this >> d;}
CRegDWORD& operator&=(DWORD d) { return *this = *this & d;}
CRegDWORD& operator|=(DWORD d) { return *this = *this | d;}
CRegDWORD& operator^=(DWORD d) { return *this = *this ^ d;}
protected:
CString m_key; ///< the name of the value
CString m_path; ///< the path to the value
DWORD m_value; ///< the cached value of the registry
DWORD m_defaultvalue; ///< the default value to use
HKEY m_base; ///< the base path
HKEY m_hKey; ///< the handle to the open key
BOOL m_read; ///< indicates if the value has already been read from the registry
BOOL m_force; ///< indicates if no cache should be used, i.e. always read and write directly from registry
};
/**
* CString value in registry. with this class you can use CString values in registry
* almost like normal CString variables in your program.
* Usage:
* in your header file, declare your registry CString variable:
* \code
* CRegString regvalue;
* \endcode
* next initialize the variable e.g. in the constructor of your class:
* \code
* regvalue = CRegString("Software\\Company\\SubKey\\MyValue", "default");
* \endcode
* this will set the registry value "MyValue" under HKEY_CURRENT_USER with path
* "Software\Company\SubKey" to the variable. If the key does not yet exist or
* an error occured during read from the registry, a default
* value of "default" is used when accessing the variable.
* now the variable can be used like any other CString variable:
* \code
* regvalue = "some string"; //stores the value "some string" in the registry
* CString temp = regvalue + "!!"; //temp has value "some string!!" now
* \endcode
* to use the normal methods of the CString class, just typecast the CRegString to a CString
* and do whatever you want with the string:
* \code
* ((CString)regvalue).GetLength();
* ((CString)regvalue).Trim();
* \endcode
* please be aware that in the second line the change in the string won't be written
* to the registry! To force a write use the write() method. A write() is only needed
* if you change the String with Methods not overloaded by CRegString.
* to avoid too much access to the registry the value is cached inside the object.
* once the value is read, no more read accesses to the registry will be made.
* this means the variable will contain a wrong value if the corresponding registry
* entry is changed by anything else than this variable! If you think that could happen
* then use
* \code
* regvalue.read();
* \endcode
* to force a refresh of the variable with the registry.
* a write to the registry is only made if the new value assigned with the variable
* is different than the last assigned value.
* to force a write use the method write();
* another option to force reads and writes to the registry is to specify TRUE as the
* third parameter in the constructor.
*/
class CRegString
{
public:
CRegString();
/**
* Constructor.
* @param key the path to the key, including the key. example: "Software\\Company\\SubKey\\MyValue"
* @param def the default value used when the key does not exist or a read error occured
* @param force set to TRUE if no cache should be used, i.e. always read and write directly from/to registry
* @param base a predefined base key like HKEY_LOCAL_MACHINE. see the SDK documentation for more information.
*/
CRegString(CString key, CString def = "", BOOL force = FALSE, HKEY base = HKEY_CURRENT_USER);
~CRegString(void);
CString read(); ///< reads the value from the registry
void write(); ///< writes the value to the registry
operator CString();
CRegString& operator=(CString s);
CRegString& operator+=(CString s) { return *this = (CString)*this + s; }
protected:
CString m_key; ///< the name of the value
CString m_path; ///< the path to the value
CString m_value; ///< the cached value of the registry
CString m_defaultvalue; ///< the default value to use
HKEY m_base; ///< the base path
HKEY m_hKey; ///< the handle to the open key
BOOL m_read; ///< indicates if the value has already been read from the registry
BOOL m_force; ///< indicates if no cache should be used, i.e. always read and write directly from registry
};
/**
* CRect value in registry. with this class you can use CRect values in registry
* almost like normal CRect variables in your program.
* Usage:
* in your header file, declare your registry CString variable:
* \code
* CRegRect regvalue;
* \endcode
* next initialize the variable e.g. in the constructor of your class:
* \code
* regvalue = CRegRect("Software\\Company\\SubKey\\MyValue", CRect(100,100,200,200));
* \endcode
* this will set the registry value "MyValue" under HKEY_CURRENT_USER with path
* "Software\Company\SubKey" to the variable. If the key does not yet exist or
* an error occured during read from the registry, a default
* value of 100,100,200,200 is used when accessing the variable.
* now the variable can be used like any other CRect variable:
* \code
* regvalue = CRect(40,20,300,500); //stores the value in the registry
* CRect temp = regvalue + CPoint(1,1);
* temp |= CSize(5,5);
* \endcode
* to use the normal methods of the CRect class, just typecast the CRegRect to a CRect
* and do whatever you want with the rect:
* \code
* ((CRect)regvalue).MoveToX(100);
* ((CRect)regvalue).DeflateRect(10,10);
* \endcode
* please be aware that in the second line the change in the CRect won't be written
* to the registry! To force a write use the write() method. A write() is only needed
* if you change the CRect with Methods not overloaded by CRegRect.
* to avoid too much access to the registry the value is cached inside the object.
* once the value is read, no more read accesses to the registry will be made.
* this means the variable will contain a wrong value if the corresponding registry
* entry is changed by anything else than this variable! If you think that could happen
* then use
* \code
* regvalue.read();
* \endcode
* to force a refresh of the variable with the registry.
* a write to the registry is only made if the new value assigned with the variable
* is different than the last assigned value.
* to force a write use the method write();
* another option to force reads and writes to the registry is to specify TRUE as the
* third parameter in the constructor.
*/
class CRegRect
{
public:
CRegRect();
/**
* Constructor.
* @param key the path to the key, including the key. example: "Software\\Company\\SubKey\\MyValue"
* @param def the default value used when the key does not exist or a read error occured
* @param force set to TRUE if no cache should be used, i.e. always read and write directly from/to registry
* @param base a predefined base key like HKEY_LOCAL_MACHINE. see the SDK documentation for more information.
*/
CRegRect(CString key, CRect def = CRect(), BOOL force = FALSE, HKEY base = HKEY_CURRENT_USER);
~CRegRect(void);
CRect read(); ///< reads the value from the registry
void write(); ///< writes the value to the registry
operator CRect();
operator LPCRECT() { return (LPCRECT)(CRect)*this; }
operator LPRECT() { return (LPRECT)(CRect)*this; }
CRegRect& operator=(CRect r);
CRegRect& operator+=(POINT r) { return *this = (CRect)*this + r;}
CRegRect& operator+=(SIZE r) { return *this = (CRect)*this + r;}
CRegRect& operator+=(LPCRECT r) { return *this = (CRect)*this + r;}
CRegRect& operator-=(POINT r) { return *this = (CRect)*this - r;}
CRegRect& operator-=(SIZE r) { return *this = (CRect)*this - r;}
CRegRect& operator-=(LPCRECT r) { return *this = (CRect)*this - r;}
CRegRect& operator&=(CRect r) { return *this = r & *this;}
CRegRect& operator|=(CRect r) { return *this = r | *this;}
protected:
CString m_key; ///< the name of the value
CString m_path; ///< the path to the value
CRect m_value; ///< the cached value of the registry
CRect m_defaultvalue; ///< the default value to use
HKEY m_base; ///< the base path
HKEY m_hKey; ///< the handle to the open key
BOOL m_read; ///< indicates if the value has already been read from the registry
BOOL m_force; ///< indicates if no cache should be used, i.e. always read and write directly from registry
};
/**
* CPoint value in registry. with this class you can use CPoint values in registry
* almost like normal CPoint variables in your program.
* Usage:
* in your header file, declare your registry CPoint variable:
* \code
* CRegPoint regvalue;
* \endcode
* next initialize the variable e.g. in the constructor of your class:
* \code
* regvalue = CRegPoint("Software\\Company\\SubKey\\MyValue", CPoint(100,100));
* \endcode
* this will set the registry value "MyValue" under HKEY_CURRENT_USER with path
* "Software\Company\SubKey" to the variable. If the key does not yet exist or
* an error occured during read from the registry, a default
* value of 100,100 is used when accessing the variable.
* now the variable can be used like any other CPoint variable:
* \code
* regvalue = CPoint(40,20); //stores the value in the registry
* CPoint temp = regvalue + CPoint(1,1);
* temp += CSize(5,5);
* \endcode
* to use the normal methods of the CPoint class, just typecast the CRegPoint to a CPoint
* and do whatever you want with the point:
* \code
* ((CRect)regvalue).Offset(100,10);
* \endcode
* please be aware that in the above example the change in the CPoint won't be written
* to the registry! To force a write use the write() method. A write() is only needed
* if you change the CPoint with Methods not overloaded by CRegPoint.
* to avoid too much access to the registry the value is cached inside the object.
* once the value is read, no more read accesses to the registry will be made.
* this means the variable will contain a wrong value if the corresponding registry
* entry is changed by anything else than this variable! If you think that could happen
* then use
* \code
* regvalue.read();
* \endcode
* to force a refresh of the variable with the registry.
* a write to the registry is only made if the new value assigned with the variable
* is different than the last assigned value.
* to force a write use the method write();
* another option to force reads and writes to the registry is to specify TRUE as the
* third parameter in the constructor.
*/
class CRegPoint
{
public:
CRegPoint();
/**
* Constructor.
* @param key the path to the key, including the key. example: "Software\\Company\\SubKey\\MyValue"
* @param def the default value used when the key does not exist or a read error occured
* @param force set to TRUE if no cache should be used, i.e. always read and write directly from/to registry
* @param base a predefined base key like HKEY_LOCAL_MACHINE. see the SDK documentation for more information.
*/
CRegPoint(CString key, CPoint def = CPoint(), BOOL force = FALSE, HKEY base = HKEY_CURRENT_USER);
~CRegPoint(void);
CPoint read();
void write(); ///< writes the value to the registry
operator CPoint();
CRegPoint& operator=(CPoint p);
CRegPoint& operator+=(CPoint p) { return *this = p + *this; }
CRegPoint& operator-=(CPoint p) { return *this = p - *this; }
protected:
CString m_key; ///< the name of the value
CString m_path; ///< the path to the value
CPoint m_value; ///< the cached value of the registry
CPoint m_defaultvalue; ///< the default value to use
HKEY m_base; ///< the base path
HKEY m_hKey; ///< the handle to the open key
BOOL m_read; ///< indicates if the value has already been read from the registry
BOOL m_force; ///< indicates if no cache should be used, i.e. always read and write directly from registry
};
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -