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,如需转载请自行联系原作者
相关文章
|
9月前
|
C++ 容器
C++中向量的操作vector
C++中向量的操作vector
|
11月前
|
C++
C++中的封装、继承与多态:深入理解与应用
C++中的封装、继承与多态:深入理解与应用
267 1
|
10月前
|
缓存 网络协议 Linux
c++实战篇(三) ——对socket通讯服务端与客户端的封装
c++实战篇(三) ——对socket通讯服务端与客户端的封装
250 0
|
7月前
|
数据安全/隐私保护 C语言 C++
C++(七)封装
本文档详细介绍了C++封装的概念及其应用。封装通过权限控制对外提供接口并隐藏内部数据,增强代码的安全性和可维护性。文档首先解释了`class`中的权限修饰符(`public`、`private`、`protected`)的作用,并通过示例展示了如何使用封装实现栈结构。接着介绍了构造器和析构器的使用方法,包括初始化列表的引入以及它们在内存管理和对象生命周期中的重要性。最后,通过分文件编程的方式展示了如何将类定义和实现分离,提高代码的模块化和复用性。
|
9月前
|
C++ 容器
【C++】map和set封装
【C++】map和set封装
67 2
|
9月前
|
存储 开发框架 Java
|
10月前
|
算法 前端开发 Linux
【常用技巧】C++ STL容器操作:6种常用场景算法
STL在Linux C++中使用的非常普遍,掌握并合适的使用各种容器至关重要!
149 10
|
10月前
|
存储 Java C#
C++语言模板类对原生指针的封装与模拟
C++|智能指针的智能性和指针性:模板类对原生指针的封装与模拟
|
10月前
|
C++ iOS开发 开发者
C++一分钟之-文件输入输出(I/O)操作
【6月更文挑战第24天】C++的文件I/O涉及`ifstream`, `ofstream`和`fstream`类,用于读写操作。常见问题包括未检查文件打开状态、忘记关闭文件、写入模式覆盖文件及字符编码不匹配。避免这些问题的方法有:检查`is_open()`、显式关闭文件或使用RAII、选择适当打开模式(如追加`ios::app`)以及处理字符编码。示例代码展示了读文件和追加写入文件的实践。理解这些要点能帮助编写更健壮的代码。
110 2
|
10月前
|
C++
C++职工管理系统(类继承、文件、指针操作、中文乱码解决)
C++职工管理系统(类继承、文件、指针操作、中文乱码解决)
106 0
C++职工管理系统(类继承、文件、指针操作、中文乱码解决)

热门文章

最新文章

下一篇
oss创建bucket