VC中操作注册表的实现源码

来源:互联网 发布:java 如何运行jar包 编辑:程序博客网 时间:2024/04/30 22:36

#pragma once
const UINT BUFFER_LENGTH = 1024;
const UINT BUFFER_LENGTH_BINARY = 3;
enum err

 ERR_OPENREGKEY,
 ERR_SETREGVALUE,
 ERR_QUERYVALUE,
 ERR_DELETEVALUE,
 ERR_SUBKEYEXIST,
 ERR_CREATESUBKEY,
 ERR_DELETESUBKEY, 
 ERR_SUCCESS,
 ERR_KEYNOTEXIST
};
enum hkey
{
 DHKEY_CLASSES_ROOT = 0x80000000,
 DHKEY_CURRENT_USER = 0x80000001,
 DHKEY_LOCAL_MACHINE = 0x80000002,
 DHKEY_USERS = 0x80000003,
 DHKEY_CURRENT_CONFIG = 0x80000005
};
class CRegeditOp
{
public:
 CRegeditOp();
 virtual ~CRegeditOp();
public:
 //Set or modify the type and value of the key
 err SetStrValue(HKEY hMainKey, CString szSubKey, CString szItem,  CString szValue);
 //query the value and the type of the key
 err GetStrValue(HKEY hMainKey, CString szSubKey, CString szItem, CString& szValue, DWORD& strType,DWORD& length);
 //delete the key value
 err DeleteStrValue(HKEY hMainKey, CString szSubKey, CString szItem);
 //create a sub key
 err AddSubKey(HKEY hMainKey, CString szSubKey);
 //delete a sub key
 err DeleteSubKey(HKEY hMainKey, CString szSubKey);
 //check the specified key path wheather exist
 err CheckRegeditFoler(HKEY hMainKey, CString szSubKey);
};

实现文件

#include "StdAfx.h"
#include "RegeditOp.h"
#include "./regeditop.h"
#include "MyFile.h"

CRegeditOp::CRegeditOp(void)
{
}

CRegeditOp::~CRegeditOp(void)
{
}

/**************************************************************************
* Name    : SetStrValue
* Function: set the value of the stecial key
* Input   :
      hMainKey:Handle to an open key,It is returned by RegOpenKeyEx or RegCreateKeyEx.it can be one of the follows predefined keys
           HKEY_CLASSES_ROOT
     HKEY_CURRENT_USER
     HKEY_LOCAL_MACHINE
     HKEY_USERS
   szSubKey:The path of the key which is going to be setted.
   szItem:The name of the key which is going to be setted
   szValue:The value of the key which is going to be setted
* Output  :
* In&Out  :
* Return  : IF success, return ERR_SUCCESS(7);if open key failed, return  ERR_OPENREGKEY(0);If set value failed, return ERR_SETREGVALUE(1)
* Others  :
* Date        Version       People Name     Content of modify
* -----------------------------------------------------------
* 2008-8-4    V1.0         jet             Create
* -----------------------------------------------------------
**************************************************************************/
err CRegeditOp::SetStrValue(HKEY hMainKey, CString szSubKey, CString szItem,  CString szValue)
{
 HKEY hRsltKey;

 //=========================================打开注册表
 long lRslt = RegOpenKeyEx(hMainKey, szSubKey, 0,KEY_SET_VALUE,&hRsltKey);
 if (lRslt != ERROR_SUCCESS)
 {  
  return ERR_OPENREGKEY;
 }

 //===================================设置注册表值
 lRslt = RegSetValueEx(hRsltKey,
       szItem,
       NULL,
       REG_SZ,
       LPBYTE(szValue.GetBuffer(szValue.GetLength())),
       szValue.GetLength());
 if (lRslt != ERROR_SUCCESS)
 {  
  return ERR_SETREGVALUE;
 }

 //============================================关闭注册表键
 if (hMainKey)
 {
  RegCloseKey(hMainKey);
 }
 if (hRsltKey)
 {
  RegCloseKey(hRsltKey);
 }
 return ERR_SUCCESS;
}


/**************************************************************************
* Name    : GetStrValue
* Function: Query the key value and type of the specify key.
* Input   :
      hMainKey:Handle to an open key,It is returned by RegOpenKeyEx or RegCreateKeyEx.it can be one of the follows predefined keys
           HKEY_CLASSES_ROOT
     HKEY_CURRENT_USER
     HKEY_LOCAL_MACHINE
     HKEY_USERS
   szSubKey:The path of the key which is going to be got.
   szItem:The name of the key which is going to be got.   
   
* Output  : szValue:A string parameter that receives the value's #
   strType:A DWORD parameter that receives the value's type
* In&Out  : length:[IN]  A DWORD parameter that spcify the value's length,if the length is smaller than the the real key length, the keyValue cann't be ruturn.
          [OUT] A DWORD parameter that receives the value's length
* Return  : IF success, return ERR_SUCCESS(7);if open key failed, return  ERR_OPENREGKEY(0);If set value failed, return ERR_SETREGVALUE(1)
* Others  :
* Date        Version       People Name     Content of modify
* -----------------------------------------------------------
* 2008-8-4    V1.0         jet             Create
* -----------------------------------------------------------
**************************************************************************/
err CRegeditOp::GetStrValue(HKEY hMainKey, CString szSubKey, CString szItem, CString& szValue, DWORD &strType,DWORD& length)

 HKEY hRsltKey;
 //打开注册表
 if (ERROR_SUCCESS != RegOpenKeyEx(hMainKey, szSubKey,0,KEY_READ, &hRsltKey))
 {  
  return ERR_OPENREGKEY;
 }
 LPBYTE lp# = new BYTE[length];
 memset(lp#,0,length);
 //查询注册表项值
 long lRslt = RegQueryValueEx(hRsltKey, szItem, 0, &strType, lp#,&length);
 szValue = (CString)lp#;
 
 if (lRslt != ERROR_SUCCESS)
 {  
  delete [] lp#;
  return ERR_QUERYVALUE;
 } 
 delete [] lp#;
 //关闭打开的键
 if (hMainKey)
 {
  RegCloseKey(hMainKey);
 }
 if (hRsltKey)
 {
  RegCloseKey(hRsltKey);
 }
 return ERR_SUCCESS;
}

/**************************************************************************
* Name    : AddSubKey
* Function: Add a new key
* Input   :
      hMainKey:Handle to an open key,It is returned by RegOpenKeyEx or RegCreateKeyEx.it can be one of the follows predefined keys
           HKEY_CLASSES_ROOT
     HKEY_CURRENT_USER
     HKEY_LOCAL_MACHINE
     HKEY_USERS
   szSubKey:The path of the key which is going to be created.
      
* Output  :
* In&Out  :
* Return  : If success, return ERR_SUCCESS(7);if the key was exist, return ERR_SUBKEYEXIST(4);if create key failed, return  ERR_CREATESUBKEY(5)
* Others  :
* Date        Version       People Name     Content of modify
* -----------------------------------------------------------
* 2008-8-4    V1.0         jet             Create
* -----------------------------------------------------------
**************************************************************************/
err CRegeditOp::AddSubKey(HKEY hMainKey, CString szSubKey)
{
 HKEY hRsltKey;
 //================================判断要增加的注册表子键是否已存在
 //LONG iReturn = RegOpenKeyEx(hMainKey, szSubKey, 0,0,&hRsltKey);
 if (ERROR_SUCCESS == RegOpenKeyEx(hMainKey, szSubKey,0,KEY_SET_VALUE,&hRsltKey))
 { 
  return ERR_SUBKEYEXIST;
 }

 //==================================如果不存在,则增加此子键
 long lRslt = RegCreateKeyEx(hMainKey, szSubKey,0,NULL,REG_OPTION_NON_VOLATILE,KEY_CREATE_SUB_KEY ,NULL, &hRsltKey,NULL);
 //long lRslt = RegCreateKey(hMainKey,szSubKey, &hRsltKey);

 if (lRslt != ERROR_SUCCESS)
 { 
  return ERR_CREATESUBKEY; 
 }

 //===============================关闭打开的注册表键句柄
 if(hMainKey)
 {
  RegCloseKey(hMainKey);
 }
 if (hRsltKey)
 {
  RegCloseKey(hRsltKey);
 }
 return ERR_SUCCESS;
}
/**************************************************************************
* Name    : DeleteStrValue
* Function: Delete the value of a key
* Input   :
      hMainKey:Handle to an open key,It is returned by RegOpenKeyEx or RegCreateKeyEx.it can be one of the follows predefined keys
           HKEY_CLASSES_ROOT
     HKEY_CURRENT_USER
     HKEY_LOCAL_MACHINE
     HKEY_USERS
   szSubKey:The path of the key which value is going to be deleted.
   szItem:The key which to be deleted.      
* Output  :
* In&Out  :
* Return  : If success, return ERR_SUCCESS(7);if open key failed, return ERR_OPENREGKEY(0);if delete key value failed, return  ERR_DELETEVALUE(3)
* Others  :
* Date        Version       People Name     Content of modify
* -----------------------------------------------------------
* 2008-8-4    V1.0         jet             Create
* -----------------------------------------------------------
**************************************************************************/
err CRegeditOp::DeleteStrValue(HKEY hMainKey, CString szSubKey, CString szItem)
{
 HKEY hRsltKey;
 //打开注册表
 long lRslt = RegOpenKeyEx(hMainKey, szSubKey,0,KEY_CREATE_SUB_KEY, &hRsltKey);
 if (lRslt != ERROR_SUCCESS)
 { 
  return ERR_OPENREGKEY;
 }
 //删除注册表项
 lRslt = RegDeleteValue(hRsltKey, szItem);
 if (lRslt != ERROR_SUCCESS)
 { 
  return ERR_DELETEVALUE;
 }
 return ERR_SUCCESS;
}

/**************************************************************************
* Name    : DeleteSubKey
* Function: Delete a key
* Input   :
      hMainKey:Handle to an open key,It is returned by RegOpenKeyEx or RegCreateKeyEx.it can be one of the follows predefined keys
           HKEY_CLASSES_ROOT
     HKEY_CURRENT_USER
     HKEY_LOCAL_MACHINE
     HKEY_USERS
   szSubKey:The path of the key which is going to be deleted.    
* Output  :
* In&Out  :
* Return  : If success, return ERR_SUCCESS(7);if delete key failed, return  ERR_DELETESUBKEY(3)
* Others  :
* Date        Version       People Name     Content of modify
* -----------------------------------------------------------
* 2008-8-4    V1.0         jet             Create
* -----------------------------------------------------------
**************************************************************************/
err CRegeditOp::DeleteSubKey(HKEY hMainKey, CString szSubKey)
{
 //=================================删除子键
 long lRslt = RegDeleteKey(hMainKey, szSubKey);
 if (lRslt)
 { 
  return ERR_KEYNOTEXIST;
 }

 //关闭打开的键
 if (hMainKey)
 {
  RegCloseKey(hMainKey);
 }
 return ERR_SUCCESS;
}

/**************************************************************************
* Name    : CheckRegeditFoler
* Function: Check wheathe the specified Key path is exist.
* Input   :
      hMainKey:Handle to an open key,It is returned by RegOpenKeyEx or RegCreateKeyEx.it can be one of the follows predefined keys
           HKEY_CLASSES_ROOT
     HKEY_CURRENT_USER
     HKEY_LOCAL_MACHINE
     HKEY_USERS
   szSubKey:The path of the key which is going to be checked.    
* Output  :
* In&Out  :
* Return  : If success, return ERR_SUCCESS(7);if delete key failed, return  ERR_DELETESUBKEY(3)
* Others  :
* Date        Version       People Name     Content of modify
* -----------------------------------------------------------
* 2008-8-4    V1.0         jet             Create
* -----------------------------------------------------------
**************************************************************************/
err CRegeditOp::CheckRegeditFoler(HKEY hMainKey, CString szSubKey)
{
 HKEY hRsltKey;
 //打开注册表
 if (ERROR_SUCCESS == RegOpenKeyEx(hMainKey, szSubKey,0,KEY_READ, &hRsltKey))
 { 
  if(hMainKey)
  {
   RegCloseKey(hMainKey);
  }
  if (hRsltKey)
  {
   RegCloseKey(hRsltKey);
  }
  return ERR_SUCCESS;
 }
 else
 {
  return FALSE;
 }
}

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 手机qq出现异常怎么办 农行卡出现异常怎么办 淘宝长期不发货怎么办 快递一直不发货怎么办 申请退款被拒绝怎么办 淘宝的垃圾短信怎么办 如果淘宝不退款怎么办 客服遇到客户骂怎么办 商场保证金不退怎么办 淘宝被投诉侵权怎么办 电脑wifi链接不见了怎么办 无线设备坏了怎么办 电脑网页默认了怎么办 淘宝商家停止服务怎么办? 淘宝商家停止了怎么办 做淘宝不会美工怎么办 做客服打字慢怎么办 淘宝客服学不会怎么办 代购不给退货怎么办 淘宝不能发照片怎么办 兼职刷手被骗怎么办 淘宝店商品被降权怎么办 淘宝宝贝被降权了怎么办 淘宝违规降权怎么办 淘宝商品降权怎么办 公司不想要了怎么办 派派被客服禁言怎么办 淘宝收款不发货怎么办 新品标签没了怎么办 商家签收不退款怎么办 微信号存在风险怎么办 建网站不会管理怎么办 淘宝代销厂家发错货卖家怎么办 来分期退货退款怎么办 淘宝售后不退货怎么办 手机淘宝不退货怎么办 淘宝店不肯退款怎么办 退货快递丢件怎么办 淘宝客服不退款怎么办 淘宝被拉进黑名单怎么办 被买家举报假货怎么办