您的位置:首页 > 其它

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

2008-08-19 22:26 411 查看
#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;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: