[类]注册表读写

// RegGetValue 只能在WIN Vista以后以及 WIN XP64下使用
//#define WIN32_WINNT   0x0600    /*RegGetValue()要定义这个*/
#include <tchar.h>   
#include <stdio.h>   
#include <windows.h>   
#include <locale.h>   


class RegistryConfig
{
 private:    
 
        HKEY m_hRootKey;
        HKEY m_hKey;
        TCHAR *m_szSubKey;
        char *m_pbValueData;

 public: 
     ~RegistryConfig()
    {
        if( NULL!=m_szSubKey )
        {
                delete []m_szSubKey;
                m_szSubKey=NULL;
        }
          if( NULL!=m_pbValueData)
        {
                delete []m_pbValueData;
                m_pbValueData=NULL;
        }
        RegCloseKey(m_hKey);
    }
    RegistryConfig(TCHAR *szSubKey)
    {                  
             m_hRootKey=HKEY_LOCAL_MACHINE;
             m_pbValueData=NULL;      
             
             m_szSubKey=new TCHAR[ lstrlen(szSubKey)*sizeof(TCHAR)];
             lstrcpy(m_szSubKey,szSubKey);
             

            _tprintf(TEXT("---------------------- -------------------------------\n"));
            if(ERROR_SUCCESS==RegOpenKeyEx(m_hRootKey,m_szSubKey,0,KEY_ALL_ACCESS,&m_hKey) ) 
            {
                _tprintf(TEXT("RegOpenKeyEx成功!\n"));
            }
            else            
            {   
                _tprintf(TEXT("RegOpenKeyEx失败!\n"));             
                if (ERROR_SUCCESS==RegCreateKey(m_hRootKey,m_szSubKey,&m_hKey))
                {
                        _tprintf(TEXT("RegCreateKey成功!\n"));
                }
                else
                {
                        _tprintf(TEXT("RegCreateKey失败!\n"));
                } 
            }
            _tprintf(TEXT("---------------------- -------------------------------\n"));

            
     }

        bool set(TCHAR *szValueName,DWORD dwValueData)
        {
                if(m_hKey!=NULL &&  ERROR_SUCCESS==RegSetValueEx(m_hKey,szValueName,0,REG_DWORD,(const BYTE *)&dwValueData,4) )
                {
                        _tprintf(TEXT("RegSetValueEx成功!\n"));                
                        return true;
                }
                else
                {
                        _tprintf(TEXT("RegSetValueEx失败!\n"));
                        return false;
                }
        }
        bool set(TCHAR *szValueName,TCHAR        *szValueData)
        {
            DWORD cbLen=lstrlen(szValueData)*sizeof(TCHAR);
            if(   m_hKey!=NULL &&   ERROR_SUCCESS==RegSetValueEx(m_hKey,szValueName,0,REG_SZ,(const BYTE *)szValueData,cbLen)                )
            {
                _tprintf(TEXT("RegSetValueEx成功!\n"));
                return true;
            }
            else
            {
                _tprintf(TEXT("RegSetValueEx失败!\n"));       
                 return false;
            }
        }
        PVOID get(TCHAR *szValueName)
        {
               
                DWORD ValueBufferSize=0;    
               if( NULL!=m_pbValueData)
                {
                        delete []m_pbValueData;
                        m_pbValueData=NULL;
                }
                方式一vista or later or xp64 
                //if( m_hKey!=NULL && ERROR_SUCCESS == RegGetValue(    m_hRootKey, m_szSubKey,szValueName,RRF_RT_ANY,NULL/*&RegType*/, NULL, &ValueBufferSize)  )  //取得缓冲大小  
                //{
                       //m_pbValueData=new char[ValueBufferSize];
                        //if(ERROR_SUCCESS == RegGetValue(    m_hRootKey,  m_szSubKey ,   szValueName,    RRF_RT_ANY, NULL/*&RegType*/,  (PVOID)m_pbValueData,   &ValueBufferSize) )
                        //{
                            //return m_pbValueData;
                        //}
                //}        
     
                方式二 xp or later// 
 
                if( m_hKey!=NULL && ERROR_SUCCESS == RegQueryValueEx(m_hKey,szValueName,NULL/*LPDWORD lpReserved*/, NULL/*&RegType*/, NULL,&ValueBufferSize) )  //取得缓冲大小  
                {
                        m_pbValueData=new char[ValueBufferSize+1];//若为字符串如REG_SZ末尾必须要自行加入NULL
                        if(ERROR_SUCCESS == RegQueryValueEx(m_hKey,szValueName,NULL/*LPDWORD lpReserved*/, NULL/*&RegType*/, (LPBYTE)m_pbValueData,&ValueBufferSize)  )
                        {                       
                                m_pbValueData[ValueBufferSize]=0;
                                return m_pbValueData;
                        }
                }        
                /
                return NULL;
                
                

         }

};
int _tmain(int argc, char* argv[])
{   
    _tsetlocale(LC_CTYPE,TEXT("chs"));
    RegistryConfig reg(TEXT("SOFTWARE\\Who cares")); 
    TCHAR *st=TEXT("HERE I AM");
    TCHAR *hello=TEXT("hellowrold");
    
    reg.set(st,hello);
    reg.set(TEXT("YOU'RE AWESOME!"),100);
    _tprintf(TEXT("ret:%s\n"),(TCHAR*)reg.get(st));
    _tprintf(TEXT("ret:%d\n"),*(DWORD*)reg.get(TEXT("YOU'RE AWESOME!")));
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值