注册表是什么
注册表是WINDOWS的大管家,系统的设置、记录、程序关联都在里面。他其实就是一个数据库,在系统中处于核心地位,在后台管理WINDOWS。
注册表怎样打开
开始--运行中输入regedit就可以了
注册表操作
CRegConfig
头文件
// RegConfig.h: interface for the CRegConfig class.
// Written by Alexander Hritonenkov on march 19, 2003
//
#if !defined(AFX_REGCONFIG_H__7E051819_5CAA_4E49_99F2_0236B42086A4__INCLUDED_)
#define AFX_REGCONFIG_H__7E051819_5CAA_4E49_99F2_0236B42086A4__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#include "atlbase.h"
class CRegConfig
{
public:
void SetRegKey(HKEY hKey, LPCTSTR strKey); // Sets registry key to keep settings in
void Load(); // Loads settings from registry
void Save(); // Saves settings to registry
CRegConfig(HKEY hKey, LPCTSTR strKey); // Constructor that sets registry key to keep settings in
CRegConfig(); // Default constructor
virtual ~CRegConfig(); // Destructor (empty)
protected:
HKEY m_hKey; // Parent key descriptor
CString m_strKey; // Our key full name
CRegKey m_rKey;
virtual void TransferAllData(BOOL bSave)=0; // Data transfering function
void Transfer(BOOL bSave, LPCTSTR strValueName, CString &strValue); // Function to load/save string data
void Transfer(BOOL bSave, LPCTSTR strValueName, DWORD &dwValue); // Function to load/save DWORD data
void Transfer(BOOL bSave, LPCTSTR strValueName, CByteArray &bValue); // Function to load/save binary data
};
#endif // !defined(AFX_REGCONFIG_H__7E051819_5CAA_4E49_99F2_0236B42086A4__INCLUDED_)
源文件
// RegConfig.cpp: implementation of the CRegConfig class.
// Written by Alexander Hritonenkov on march 19, 2003
//
#include "stdafx.h"
#include "config.h"
#include "RegConfig.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//
// Construction/Destruction
//
CRegConfig::CRegConfig(HKEY hKey, LPCTSTR strKey)
{
SetRegKey(hKey, strKey);
}
CRegConfig::CRegConfig()
{
m_hKey=NULL;
m_strKey="";
}
CRegConfig::~CRegConfig()
{
}
void CRegConfig::SetRegKey(HKEY hKey, LPCTSTR strKey)
{
m_hKey=hKey;
m_strKey=strKey;
}
void CRegConfig::Save()
{
if(m_rKey.Create(m_hKey, m_strKey)==ERROR_SUCCESS)
{
TransferAllData(TRUE);
m_rKey.Close();
}
}
void CRegConfig::Load()
{
if(m_rKey.Create(m_hKey, m_strKey)==ERROR_SUCCESS)
{
TransferAllData(FALSE);
m_rKey.Close();
}
}
void CRegConfig::Transfer(BOOL bSave, LPCTSTR strValueName, DWORD &dwValue)
{
if(bSave)
m_rKey.SetValue(dwValue, strValueName);
else
m_rKey.QueryValue(dwValue, strValueName);
}
void CRegConfig::Transfer(BOOL bSave, LPCTSTR strValueName, CString &strValue)
{
if(bSave)
m_rKey.SetValue(strValue, strValueName);
else
{
DWORD dwLen;
LPTSTR lpStr;
if(m_rKey.QueryValue(NULL, strValueName, &dwLen)==ERROR_SUCCESS)
{
lpStr=strValue.GetBuffer(dwLen+1);
m_rKey.QueryValue(lpStr, strValueName, &dwLen);
strValue.ReleaseBuffer(dwLen);
}
}
}
void CRegConfig::Transfer(BOOL bSave, LPCTSTR strValueName, CByteArray &bValue)
{
DWORD dwLen, dwType;
LPBYTE lpData;
if(bSave)
{
dwLen=bValue.GetSize();
lpData=bValue.GetData();
RegSetValueEx(m_rKey.m_hKey, strValueName, 0, REG_BINARY, lpData, dwLen);
}
else
{
dwType=REG_BINARY;
if(RegQueryValueEx(m_rKey.m_hKey, strValueName, NULL, &dwType, NULL, &dwLen)==ERROR_SUCCESS)
{
bValue.RemoveAll();
bValue.SetSize(dwLen);
lpData=bValue.GetData();
RegQueryValueEx(m_rKey.m_hKey, strValueName, NULL, &dwType, lpData, &dwLen);
}
}
}
CMyRegConfig
头文件
// MyRegConfig.h: interface for the CMyRegConfig class.
// Written by Alexander Hritonenkov on march 19, 2003
//
#if !defined(AFX_MYREGCONFIG_H__9F26EC5C_AE0B_4259_A4B4_A09A40FB89D7__INCLUDED_)
#define AFX_MYREGCONFIG_H__9F26EC5C_AE0B_4259_A4B4_A09A40FB89D7__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#include "RegConfig.h"
class CMyRegConfig : public CRegConfig
{
public:
CMyRegConfig();
virtual ~CMyRegConfig();
// data members
DWORD m_dwValue1;
DWORD m_dwValue2;
CString m_strValue;
CByteArray m_bData;
protected:
virtual void TransferAllData(BOOL bSave); // overrided pure virtual function for perform saving and loading data
};
#endif // !defined(AFX_MYREGCONFIG_H__9F26EC5C_AE0B_4259_A4B4_A09A40FB89D7__INCLUDED_)
源文件
// MyRegConfig.cpp: implementation of the CMyRegConfig class.
// Written by Alexander Hritonenkov on march 19, 2003
//
#include "stdafx.h"
#include "config.h"
#include "MyRegConfig.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//
// Construction/Destruction
//
CMyRegConfig::CMyRegConfig() : CRegConfig(HKEY_LOCAL_MACHINE, "Software\\test")
{
// set default values for our settings
// they are used on first start (if data is not present in registry)
m_dwValue1=100;
m_dwValue2=200;
m_strValue="Sample string";
Load(); // you can add automatic load of config on construction
}
CMyRegConfig::~CMyRegConfig()
{
Save(); // you can add automatic save of config on destruction
}
void CMyRegConfig::TransferAllData(BOOL bSave)
{
// add Transfer() function for each data member in your class
Transfer(bSave, "Value1", m_dwValue1);
Transfer(bSave, "Value2", m_dwValue2);
Transfer(bSave, "String", m_strValue);
Transfer(bSave, "Data", m_bData);
}
操作界面
相关操作
void CConfigDlg::OnBtnOk()
{
SaveData();
OnOK();
}
void CConfigDlg::LoadData()
{
SetDlgItemInt(ID_VAL1, m_Config.m_dwValue1, 0);
SetDlgItemInt(ID_VAL2, m_Config.m_dwValue2, 0);
SetDlgItemText(ID_STRING, m_Config.m_strValue);
LPCTSTR lpStr=(LPCTSTR)m_Config.m_bData.GetData();
if(lpStr!=NULL)
{
SetDlgItemText(ID_BINARY, lpStr);
}
}
void CConfigDlg::SaveData()
{
m_Config.m_dwValue1=GetDlgItemInt(ID_VAL1, NULL, 0);
m_Config.m_dwValue2=GetDlgItemInt(ID_VAL2, NULL, 0);
GetDlgItemText(ID_STRING, m_Config.m_strValue);
CString str;
GetDlgItemText(ID_BINARY, str);
m_Config.m_bData.RemoveAll();
m_Config.m_bData.SetSize(str.GetLength()+1);
memcpy(m_Config.m_bData.GetData(), (LPCTSTR)str, str.GetLength());
}
运行效果
根据如下所知,是要在HKEY_LOCAL_MACHINE项的Software下添加一项test
运行前,注册表中没有这一项
运行后,我们发现多了一个我们生成的这个项
注册表中多了一项test
修改值