hKeyRoot=?
pszPath=??
//以上两个值都可以自己设置的!

解决方案 »

  1.   

    以下是这个类的完整代码!
    #include <winreg.h>class CRegistry:public CObject
    {
    public:
    CRegistry();
    virtual ~CRegistry();
    struct REGINFO
    {
    LONG  IMessage;
    DWORD dwType;
    DWORD dwSize;
    }m_Info;
    public: HKEY GetRootKey(); //获得当前的根键的设置;
    void SetRootKey(HKEY hBootHey); //用来设置当前的根键; BOOL VerifyKey(HKEY hKeyRoot,LPCTSTR pszPath);//检测键是否存在;
    BOOL VerifyValue(LPCTSTR pszValue);           //检测键值是否存在; BOOL CreateKey(HKEY hKeyRoot,LPCTSTR pszPath);//用来创建键值; BOOL Open(HKEY hKeyRoot,LPCTSTR pszPath);     //打开注册表;
    void Close();   //关闭注册表; BOOL DeleteValue(LPCTSTR pszValue);   //删除键值;
    BOOL DeleteValueKey(HKEY hKeyRoot,LPCTSTR pszPath);//删除键; BOOL WriteStr(LPCTSTR pszKey,LPCTSTR pszVal); //读当前值的内容;
    BOOL WriteDword(LPCTSTR pszKey,DWORD* lpData); BOOL ReadStr(LPCTSTR pszKey,CString& sValue); //写当前值的内容;
    BOOL ReadDWord(LPCTSTR pszKey,DWORD* dValue);
    protected:
    HKEY m_hKey;
    CString m_sPath;
    };
    CRegistry::CRegistry()
    {
    //默认的根键为HKEY_LOCAL_MACHINE;
    m_hKey=HKEY_LOCAL_MACHINE;
    }CRegistry::~CRegistry()
    { //关闭注册表
    Close();          
    }void CRegistry::SetRootKey(HKEY hBootKey)
    { //用来设置键根
    m_hKey=hBootKey;
    }HKEY CRegistry::GetRootKey()
    { //得到键根
    return m_hKey;
    }
    //以下是判定所给的键是否存在
    BOOL CRegistry::VerifyKey(HKEY hKeyRoot,LPCTSTR pszPath)
    {
    ASSERT(hKeyRoot);
    ASSERT(pszPath); LONG ReturnValue=RegOpenKeyEx(hKeyRoot,pszPath,0L,
    KEY_ALL_ACCESS,&m_hKey);//试图打开键
    if(ReturnValue==ERROR_SUCCESS)//返回ERROR_SUCCESS表示成功
    return TRUE; m_Info.IMessage=ReturnValue;
    m_Info.dwSize=0L;
    m_Info.dwType=0L; return FALSE;
      
    }
    //以下是效验值函数
    BOOL CRegistry::VerifyValue(LPCTSTR pszValue)
    {
    ASSERT(m_hKey);
    LONG IReturn=RegQueryValueEx(m_hKey,pszValue,NULL,
    NULL,NULL,NULL);//主册表查询API;
    m_Info.IMessage=IReturn;
    m_Info.dwSize=0L;
    m_Info.dwType=0L; if(IReturn==ERROR_SUCCESS)
    return TRUE; return FALSE;
    }
    //以下函数是用来写入键
    BOOL CRegistry::CreateKey(HKEY hKeyRoot,LPCTSTR pszPath)
    {
    DWORD dw;
    //建立并打开关键字,如主册表关键字已经存在,
    //则打开这个这个关键字(32Windows)
    LONG ReturnValue=RegCreateKeyEx(hKeyRoot,pszPath,0L,NULL,
    REG_OPTION_VOLATILE,KEY_ALL_ACCESS,NULL,&m_hKey,&dw);
    m_Info.IMessage=ReturnValue;
    m_Info.dwSize=0L;
    m_Info.dwType=0L; if(ReturnValue==ERROR_SUCCESS)
    return TRUE;
    return FALSE;
    }
    //以下用来打开一个键
    BOOL CRegistry::Open(HKEY hKeyRoot,LPCTSTR pszPath)
    {
    m_sPath=pszPath;
    //主册表操作API
    //打开指定的关键字
    LONG ReturnValue=RegOpenKeyEx(hKeyRoot,pszPath,0L,
    KEY_ALL_ACCESS,&m_hKey); m_Info.IMessage=ReturnValue;
    m_Info.dwType=0L;
    m_Info.dwSize=0L; if(ReturnValue==ERROR_SUCCESS)
    return TRUE; return FALSE;
    }
    //关闭主册表函数
    void CRegistry::Close()
    {
    if(m_hKey)
    { //主册表操作API
    //释放指定的关键字
    RegCloseKey(m_hKey);
    m_hKey=NULL;
    }
    }
    //写键值
    BOOL CRegistry::WriteStr(LPCTSTR pszKey,LPCTSTR pszData)
    {
    ASSERT(m_hKey);
    ASSERT(pszKey);
    ASSERT(pszData);
    ASSERT(AfxIsValidAddress(pszData,strlen(pszData),FALSE));
     //主册表API
    LONG ReturnValue=RegSetValueEx(m_hKey,pszKey,0L,REG_SZ,
    (CONST BYTE*)pszData,strlen(pszData)+1); m_Info.IMessage=ReturnValue;
    m_Info.dwSize=strlen(pszData)+1;
    m_Info.dwType=REG_SZ; if(ReturnValue==ERROR_SUCCESS)
    return TRUE; return FALSE;} BOOL CRegistry::WriteDword(LPCTSTR pszKey,DWORD* lpData)
    {
    ASSERT(m_hKey);
    ASSERT(pszKey); LONG ReturnValue=RegSetValueEx(m_hKey,pszKey,0,REG_DWORD,
    (CONST BYTE*)lpData,sizeof(DWORD)); if(ReturnValue==ERROR_SUCCESS)
    return TRUE; return FALSE;}
    BOOL CRegistry::ReadStr(LPCTSTR pszKey,CString& sVal)
    {
    ASSERT(m_hKey);
    ASSERT(pszKey); DWORD dwType;
    DWORD dwSize=100;
    char szString[255]; LONG IReturn=RegQueryValueEx(m_hKey,(LPSTR)pszKey,NULL,
    &dwType,(BYTE*)szString,&dwSize); m_Info.IMessage=IReturn;
    m_Info.dwType=dwType;
    m_Info.dwSize=dwSize; if(IReturn==ERROR_SUCCESS)
    {
    sVal=szString;
    return TRUE;
    }
    return TRUE;
    }BOOL CRegistry::ReadDWord(LPCTSTR pszKey,DWORD* dValue)
    {
    ASSERT(m_hKey);
    ASSERT(pszKey); DWORD dwSize=(DWORD)sizeof(DWORD); LONG IReturn=RegQueryValueEx(m_hKey,pszKey,NULL,NULL,
    (BYTE*)dValue,&dwSize);

    m_Info.IMessage=IReturn;
    m_Info.dwSize=dwSize; if(IReturn==ERROR_SUCCESS)
    {
    return TRUE;
    }
    return FALSE;}BOOL CRegistry::DeleteValue(LPCTSTR pszValue)
    {
    ASSERT(m_hKey);
    LONG IReturn=RegDeleteValue(m_hKey,pszValue); m_Info.IMessage=IReturn;
    m_Info.dwType=0L;
    m_Info.dwSize=0L;
    if(IReturn==ERROR_SUCCESS)
    return TRUE; return FALSE;
    }BOOL CRegistry::DeleteValueKey(HKEY hKeyRoot,LPCTSTR pszPath)
    {
    ASSERT(pszPath);
    ASSERT(hKeyRoot); LONG IReturn=RegDeleteKey(hKeyRoot,pszPath);
    m_Info.IMessage=IReturn;
    m_Info.dwType=0L;
    m_Info.dwSize=0L; if(IReturn==ERROR_SUCCESS)
    return TRUE; return FALSE;
    }
      

  2.   

    hKeyRoot=HKEY_LOCAL_MACHINE;
    pszPath="SOFTWARE\\Microsoft\\abc";