C++对注册表常见操作的封装实现(二)

简介:
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;      
}   
 

本文转自jazka 51CTO博客,原文链接:http://blog.51cto.com/jazka/201904,如需转载请自行联系原作者
相关文章
|
2月前
|
存储 安全 数据管理
探索C++中回调函数的数据结构和封装的权衡以及示例
探索C++中回调函数的数据结构和封装的权衡以及示例
75 4
|
2月前
|
Linux 编译器 C++
C/C++性能优化:从根本上消除拷贝操作的浪费
C/C++性能优化:从根本上消除拷贝操作的浪费
63 0
|
1月前
|
人工智能 机器人 C++
【C++/Python】Windows用Swig实现C++调用Python(史上最简单详细,80岁看了都会操作)
【C++/Python】Windows用Swig实现C++调用Python(史上最简单详细,80岁看了都会操作)
|
2月前
|
存储 JSON 安全
【C++ JSON库 json值的创建手段】深入探究C++中JSON对象定位与操作:从引用到回调函数
【C++ JSON库 json值的创建手段】深入探究C++中JSON对象定位与操作:从引用到回调函数
71 0
|
3天前
|
存储 编译器 C++
C++:map&set 对红黑树的封装
C++:map&set 对红黑树的封装
8 1
|
5天前
|
存储 安全 算法
【C++入门到精通】 原子性操作库(atomic) C++11 [ C++入门 ]
【C++入门到精通】 原子性操作库(atomic) C++11 [ C++入门 ]
14 1
|
19天前
|
C++
C++ 访问说明符详解:封装数据,控制访问,提升安全性
C++ 中的访问说明符(public, private, protected)用于控制类成员的可访问性,实现封装,增强数据安全性。public 成员在任何地方都可访问,private 只能在类内部访问,protected 则允许在类及其派生类中访问。封装提供数据安全性、代码维护性和可重用性,通过 setter/getter 方法控制对私有数据的访问。关注公众号 `Let us Coding` 获取更多内容。
26 1
|
27天前
|
编译器 C语言 C++
【C++成长记】C++入门 | 类和对象(上) |面向过程和面向对象初步认识、类的引入、类的定义、类的访问限定符及封装
【C++成长记】C++入门 | 类和对象(上) |面向过程和面向对象初步认识、类的引入、类的定义、类的访问限定符及封装
|
28天前
|
存储 C++
二叉树的操作(C++实现)
二叉树的操作(C++实现)
|
28天前
|
C++
有序链表的操作(底层c++实现)
有序链表的操作(底层c++实现)