现在的位置: 首页 > 综合 > 正文

my first useful CPP Class CRegistry

2013年10月12日 ⁄ 综合 ⁄ 共 2217字 ⁄ 字号 评论关闭
 今天为了写一个系统管理的小工具,参照Borland C++ Builder 的TRegistry 的接口,写了个CRegistry类. 目前只实现了ReadString() 方法,用来读取Windows 注册表中的 REG_SZ 项的值. 也没有进行错误处理。我想以后再慢慢的完善改进吧。

/*
 *Filename: Registry.h
 *Created By: bob.liu
 *Create Date: 2007.2.24
 
*/

#pragma once

class CRegistry
{
public:
    CRegistry(DWORD Access
=KEY_READ);
    
~CRegistry(void);
    BOOL OpenKey(LPCTSTR Key, BOOL CanCreate
=false);
    
void CloseKey(void);
    LPTSTR ReadString(LPCTSTR lpValueName);

public:
    DWORD m_wAccess;
    HKEY m_hCurrentKey;
    LPCTSTR m_CurrentPath; 
//if this doesn't work, a CString will be used
    HKEY m_hRootKey;
    
/*
    TRegistry properties
    Access
    CurrentKey
    CurrentPath
    LazyWrite
    RootKey
    
*/


}
;

/*
 *Filename: Registry.cpp
 *Created By: bob.liu
 *Create Date: 2007.2.24
 
*/

#include 
"StdAfx.h"
#include 
". egistry.h"


CRegistry::CRegistry(DWORD Access)
{
    m_wAccess 
= Access;
}


CRegistry::
~CRegistry(void)
{
    RegCloseKey(m_hCurrentKey);
    TRACE(
"%s ",m_CurrentPath);
}


void CRegistry::CloseKey(void)
{
    RegCloseKey(m_hCurrentKey);
}


BOOL CRegistry::OpenKey(LPCTSTR szSubKey, BOOL CanCreate)
{
    RegOpenKeyEx(m_hRootKey,    
//hKey
            szSubKey,                //subkey
            0,                            //options,reserved, must be 0
            m_wAccess,                    //samDesired
            &m_hCurrentKey);            //phkResult 
            m_CurrentPath = szSubKey;
    
return TRUE;
}


LPTSTR CRegistry::ReadString(LPCTSTR lpValueName)
{
    LONG lRet;
    DWORD dwType;
    DWORD dwCount;
    LPBYTE lpData 
= NULL;

    lRet 
= RegQueryValueEx(
        m_hCurrentKey,        
//hKey, root key
        lpValueName,
        NULL,                
//lpReserved
        &dwType,                //LPDWORD lpType,
        lpData,
        
&dwCount                //LPDWORD lpcbData
        );

    
if(ERROR_SUCCESS == lRet)
    
{
        lpData 
= new BYTE[dwCount];
        lRet 
= RegQueryValueEx(
            m_hCurrentKey,        
//hKey, root key
            lpValueName,
            NULL,                
//lpReserved
            &dwType,            //LPDWORD lpType,
            lpData,
            
&dwCount                //LPDWORD lpcbData
            );
    }


    
return (LPTSTR) lpData; //it's caller's responsibility to delete this memory

}

抱歉!评论已关闭.