2、实现文件
view plaincopy to clipboardprint?
/******************************************************************** 
*  文件名:RegOperator.cpp 
*  文件描述:对头文件中定义类的成员函数进行了实现 
*  创建人: RainLeaf, 2009年4月10日 
*  版本号:1.0 
*  修改记录: 
*********************************************************************/ 
 
#include "RegOperator.h"  
 
/*============================================================ 
* 函 数 名:CRegOperator 
* 参  数:HKEY [IN] : 默认是HKEY_LOCAL_MACHINE 
* 功能描述:构造函数,初始化根键 
* 返 回 值:无 
* 抛出异常: 
* 作  者:RainLeaf, 2009年4月10日 
*============================================================*/ 
 
CRegOperator::CRegOperator( HKEY hKey )  
{  
    m_hKey = HKEY_LOCAL_MACHINE;  
}  
 
/*============================================================ 
* 函 数 名:~CRegOperator 
* 参  数:NULL [IN] 
* 功能描述:析构函数,关闭打开的注册表句柄 
* 返 回 值:无 
* 抛出异常: 
* 作  者:RainLeaf, 2009年4月10日 
*============================================================*/ 
 
CRegOperator::~CRegOperator()  
{  
    Close();  
}  
 
/*============================================================ 
* 函 数 名:Close 
* 参  数:NULL [IN] 
* 功能描述:关闭打开键的句柄 
* 返 回 值:void 
* 抛出异常: 
* 作  者:RainLeaf, 2009年4月10日 
*============================================================*/ 
 
void CRegOperator::Close()  
{  
    if( m_hKey )  
    {  
        /* 句柄非空进行关闭 */ 
        RegCloseKey( m_hKey );  
        m_hKey = NULL;  
    }     
}  
 
/*============================================================ 
* 函 数 名:SetHKEY 
* 参  数:LPCTSTR [IN] : 根键值 
* 功能描述:由传入的根键字符串设置当前操作的根键的值 
* 返 回 值:BOOL 
* 抛出异常: 
* 作  者:RainLeaf, 2009年4月10日 
*============================================================*/ 
 
BOOL CRegOperator::SetHKEY( LPCTSTR strKey )  
{  
    assert( m_hKey );  
    assert( strKey );  
 
    /* 逐个进行比较 */ 
    if( 0 == strcmp(strKey,"HKEY_CLASSES_ROOT") )  
    {  
        m_hKey = HKEY_CLASSES_ROOT;  
        return TRUE;  
    }  
    if( 0 == strcmp(strKey,"HKEY_CURRENT_USER") )  
    {  
        m_hKey = HKEY_CURRENT_USER;  
        return TRUE;  
    }  
    if( 0 == strcmp(strKey,"HKEY_LOCAL_MACHINE") )  
    {  
        m_hKey = HKEY_LOCAL_MACHINE;  
        return TRUE;  
    }  
    if( 0 == strcmp(strKey,"HKEY_USERS") )  
    {  
        m_hKey = HKEY_USERS;  
        return TRUE;  
    }  
    if( 0 == strcmp(strKey,"HKEY_PERFORMANCE_DATA") )  
    {  
        m_hKey = HKEY_PERFORMANCE_DATA;  
        return TRUE;  
    }  
    if( 0 == strcmp(strKey,"HKEY_PERFORMANCE_TEXT") )  
    {  
        m_hKey = HKEY_PERFORMANCE_TEXT;  
        return TRUE;  
    }  
    if( 0 == strcmp(strKey,"HKEY_PERFORMANCE_NLSTEXT") )  
    {  
        m_hKey = HKEY_PERFORMANCE_NLSTEXT;  
        return TRUE;  
    }  
    /* 对操作系统版本进行测试 */ 
#if(WINVER >= 0x0400)  
    if( 0 == strcmp(strKey,"HKEY_CURRENT_CONFIG") )  
    {  
        m_hKey = HKEY_CURRENT_CONFIG;  
        return TRUE;  
    }  
    if( 0 == strcmp(strKey,"HKEY_DYN_DATA") )  
    {  
        m_hKey = HKEY_DYN_DATA;  
        return TRUE;  
    }  
#endif  
 
    return FALSE;  
}  
 
/*============================================================ 
* 函 数 名:OpenKey 
* 参  数:LPCTSTR [IN] : 子键字符串 
* 功能描述:通过传入子键的字符串打开注册表相应的位置 
* 返 回 值:BOOL 
* 抛出异常: 
* 作  者:RainLeaf, 2009年4月10日 
*============================================================*/ 
 
BOOL CRegOperator::OpenKey( LPCTSTR lpSubKey )  
{  
    assert( m_hKey );  
    assert( lpSubKey );  
      
    HKEY hKey;  
    long lReturn = RegOpenKeyEx( m_hKey, lpSubKey, 0L, KEY_READ | KEY_WRITE | KEY_EXECUTE, &hKey );  
      
    if( ERROR_SUCCESS == lReturn )  
    {  
        /* 成功打开则将打开的句柄保存 */ 
        m_hKey = hKey;  
 
        return TRUE;  
    }  
    /* 打开失败 */ 
    return FALSE;     
}  
 
/*============================================================ 
* 函 数 名:CreateKey 
* 参  数:LPCTSTR [IN] : 子键字符串 
* 功能描述:通过传入子键的字符串打开(存在子键)或者创建(不存在子键)相应的子键 
* 返 回 值:BOOL 
* 抛出异常: 
* 作  者:RainLeaf, 2009年4月10日 
*============================================================*/ 
 
BOOL CRegOperator::CreateKey( LPCTSTR lpSubKey )  
{  
    assert( m_hKey );  
    assert( lpSubKey );  
 
    HKEY hKey;  
    DWORD dw;  
    long lReturn = RegCreateKeyEx( m_hKey, lpSubKey, 0L, NULL, REG_OPTION_VOLATILE, KEY_ALL_ACCESS, NULL, &hKey, &dw);  
      
    if( ERROR_SUCCESS == lReturn )  
    {  
        /* 成功打开或者创建则将句柄保存 */ 
        m_hKey = hKey;  
 
        return TRUE;  
    }  
    /* 打开或者创建失败 */ 
    return FALSE;     
}  
 
/*============================================================ 
* 函 数 名:DeleteKey 
* 参  数:LPCTSTR LPCTSTR [IN] : 根键值 子键值 
* 功能描述:通过传入的根键和子键,将子键删除删除,不能包含子键 
* 返 回 值:BOOL 
* 抛出异常: 
* 作  者:RainLeaf, 2009年4月10日 
*============================================================*/ 
 
//BOOL CRegOperator::DeleteKey( HKEY hKey, LPCTSTR lpSubKey )  
BOOL CRegOperator::DeleteKey( LPCTSTR lphKey, LPCTSTR lpSubKey )  
{  
    assert( lphKey );  
    assert( lpSubKey );  
    assert( m_hKey );  
 
    SetHKEY( lphKey );  
    long lReturn = RegDeleteValue( m_hKey, lpSubKey );  
      
    if( ERROR_SUCCESS == lReturn )  
    {  
        /* 删除成功 */ 
        return TRUE;  
    }  
    /* 删除失败 */ 
    return FALSE;     
}  
 
/*============================================================ 
* 函 数 名:DeleteValue 
* 参  数:LPCTSTR [IN] : 要删除键值的名称 
* 功能描述:通过传入键值名称,删除对应的键值 
* 返 回 值:BOOL 
* 抛出异常: 
* 作  者:RainLeaf, 2009年4月10日 
*============================================================*/ 
 
BOOL CRegOperator::DeleteValue( LPCTSTR lpValueName )  
{  
    assert( m_hKey );  
    assert( lpValueName );  
      
    long lReturn = RegDeleteValue( m_hKey, lpValueName );  
      
    if( ERROR_SUCCESS == lReturn )  
    {  
        /* 删除成功 */ 
        return TRUE;  
    }  
    /* 删除失败 */ 
    return FALSE;     
}  
 
 
本文来自CSDN博客,转载请标明出处: http://blog.csdn.net/eaglewood2005/archive/2009/04/15/4076401.aspx