我给你的封装类:
type reg.h:
//---------------------------------------------
#include <winreg.h>class CRegisterKey  
{
public:
LONG Read(LPCTSTR pszKey , BYTE *pData , DWORD & dwLength);
LONG Read(LPCTSTR pszKey, CString &sVal);
LONG Read(LPCTSTR pszKey , DWORD & dwVal);
LONG Write(LPCTSTR pszKey , const BYTE *pData , DWORD dwLength);
LONG Write(LPCTSTR pszKey , LPCTSTR pszVal);
LONG Write(LPCTSTR pszKey , DWORD dwVal);
void Close();
LONG Open(HKEY hKeyRoot , LPCTSTR pszPath , REGSAM dwAccess = KEY_ALL_ACCESS);
CRegisterKey();
virtual ~CRegisterKey();protected:
CString m_sPath;
HKEY m_hKey;
};
//-------------------------type reg.cpp:
//--------------------------
#include "RegKey.h"//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////CRegisterKey::CRegisterKey()
{
m_hKey = NULL;
}CRegisterKey::~CRegisterKey()
{
Close();
}LONG CRegisterKey::Open(HKEY hKeyRoot, LPCTSTR pszPath , REGSAM dwAccess)
{
DWORD dw;
m_sPath = pszPath; return RegCreateKeyEx(hKeyRoot , pszPath , 0L , NULL , REG_OPTION_NON_VOLATILE , 
dwAccess , NULL , &m_hKey , &dw);
}void CRegisterKey::Close()
{
if(m_hKey)
{
RegCloseKey(m_hKey);
m_hKey = NULL;
}
}LONG CRegisterKey::Write(LPCTSTR pszKey, DWORD dwVal)
{
ASSERT(m_hKey);
ASSERT(pszKey); return RegSetValueEx(m_hKey , pszKey , 0L , REG_DWORD , (CONST BYTE *) &dwVal ,
sizeof(DWORD));
}LONG CRegisterKey::Write(LPCTSTR pszKey, LPCTSTR pszVal)
{
ASSERT(m_hKey);
ASSERT(pszKey);
ASSERT(pszVal);
ASSERT(AfxIsValidAddress(pszVal , strlen(pszVal) , FALSE)); return RegSetValueEx(m_hKey , pszKey , 0L , REG_SZ , (CONST BYTE *) pszVal , 
strlen(pszVal)+1);
}LONG CRegisterKey::Write(LPCTSTR pszKey, const BYTE *pData, DWORD dwLength)
{
ASSERT(m_hKey);
ASSERT(pszKey);
ASSERT(pData && dwLength>0);
ASSERT(AfxIsValidAddress(pData , dwLength , FALSE)); return RegSetValueEx(m_hKey , pszKey , 0L , REG_BINARY , pData , dwLength);
}LONG CRegisterKey::Read(LPCTSTR pszKey, DWORD &dwVal)
{
ASSERT(m_hKey);
ASSERT(pszKey); DWORD dwType;
DWORD dwSize = sizeof(DWORD);
DWORD dwDest; LONG lRet = RegQueryValueEx(m_hKey , pszKey , NULL , &dwType , (LPBYTE) &dwDest , &dwSize); if(lRet == ERROR_SUCCESS)
dwVal = dwDest; return lRet;
}LONG CRegisterKey::Read(LPCTSTR pszKey, CString &sVal)
{
ASSERT(m_hKey);
ASSERT(pszKey); DWORD dwType;
DWORD dwSize = 512;
char string[512]; LONG lRet = RegQueryValueEx(m_hKey , pszKey , NULL , &dwType , (LPBYTE) string , &dwSize); if(lRet == ERROR_SUCCESS)
sVal = string; return lRet;
}LONG CRegisterKey::Read(LPCTSTR pszKey, BYTE *pData, DWORD &dwLength)
{
ASSERT(m_hKey);
ASSERT(pszKey); DWORD dwType; return RegQueryValueEx(m_hKey , pszKey , NULL , &dwType , pData , &dwLength);
}
//----------------------------例程: CRegisterKey key;
CString str;
key.Open(HKEY_LOCAL_MACHINE , _T("SOFTWARE\\MICROSOFT\\WINDOWS\\CurrentVersion") , KEY_READ);

//Get Program files Path
key.Read("ProgramFilesDir" , str);
          
         AfxMessageBox(str);         //create new item
         key.Write("NewItem1" , "NewItem1Value")
          
         key.Close();