VC++ 注册表操作

头文件声明(CRegKey.h):

#ifndef REG_KEY_HEAD_FILE
#define REG_KEY_HEAD_FILE

#pragma once

//键项组手
class CRegKey
{
	//键项变量
protected:
	HKEY							m_hRegKey;							//当前键项

	//静态变量
protected:
	static TCHAR					m_szMainKeyName[64];				//主键名字

	//函数定义
public:
	//构造函数
	CWHRegKey();
	//析构函数
	virtual ~CWHRegKey();

	//配置函数
public:
	//设置主键
	static VOID SetMainKeyName(LPCTSTR pszMainKeyName);
	//获取主键
	static LPCTSTR GetMainKeyName() { return m_szMainKeyName; }

	//绑定函数
public:
	//解除绑定
	HKEY Detach();
	//绑定键项
	HKEY Attach(HKEY hRegKey);

	//管理函数
public:
	//关闭键项
	bool CloseRegKey();
	//打开键项
	bool OpenRegKey(LPCTSTR pszKeyName, bool bCreate);
	//打开键项
	bool OpenRegKey(LPCTSTR pszMainKeyName, LPCTSTR pszKeyName, bool bCreate);

	//控制函数
public:
	//打开键项
	HKEY OpenItemKey(LPCTSTR pszSubKeyName);
	//创建键项
	HKEY CreateItemKey(LPCTSTR pszSubKeyName);
	//枚举键项
	bool EnumItemString(DWORD dwIndex, LPTSTR pszString, DWORD dwSize);

	//写入函数
public:
	//写入数值
	bool WriteValue(LPCTSTR pszName, DWORD dwValue);
	//写入字符
	bool WriteString(LPCTSTR pszName, LPCTSTR pszString);
	//写入字符
	bool WriteEncryptString(LPCTSTR pszName, LPCTSTR pszString);
	//写入数据
	bool WriteBinary(LPCTSTR pszName, const VOID * pData, DWORD dwSize);

	//读取函数
public:
	//读取数值
	DWORD GetValue(LPCTSTR pszName, DWORD dwDefValue);
	//读取数据
	DWORD GetBinary(LPCTSTR pszName, VOID * pData, DWORD dwBufferSize);
	//读取字符
	DWORD GetString(LPCTSTR pszName, LPTSTR pszString, UINT uMaxCount);
	//读取字符
	DWORD GetEncryptString(LPCTSTR pszName, LPTSTR pszString, UINT uMaxCount);

	//删除函数
public:
	//删除数值
	bool DeleteValue(LPCTSTR pszName);
	//删除键项
	bool DeleteKey(LPCTSTR pszSubKeyName);

	//辅助函数
public:
	//键项重载
	operator HKEY() { return m_hRegKey; }
	//获取键项
	HKEY GetRegKey() { return m_hRegKey; }

	//内部函数
private:
	//删除键项
	LONG DeleteKey(HKEY hParentKey, LPCTSTR pszSubKeyName);
};

#endif

源码实现(CRegKey.cpp):

#include "StdAfx.h"
#include "CRegKey.h"
#include "CEncrypt.h"

//静态变量

TCHAR		CRegKey::m_szMainKeyName[64]=TEXT("");					//主键名字

//构造函数
CRegKey::CRegKey()
{
	//键项变量
	m_hRegKey=NULL;

	//键名变量
	if (m_szMainKeyName[0]==0)
	{
		CWinApp * pWinApp=AfxGetApp();
		lstrcpyn(m_szMainKeyName,pWinApp->m_pszAppName,CountArray(m_szMainKeyName));
	}

	return;
}

//析构函数
CRegKey::~CRegKey()
{
	//关闭键项
	if (m_hRegKey!=NULL) CloseRegKey();

	return;
}

//设置主键
VOID CRegKey::SetMainKeyName(LPCTSTR pszMainKeyName)
{
	//设置变量
	ASSERT(pszMainKeyName!=NULL);
	lstrcpyn(m_szMainKeyName,pszMainKeyName,CountArray(m_szMainKeyName));

	return;
}

//接触绑定
HKEY CRegKey::Detach()
{
	//保存变量
	HKEY hRegKey=m_hRegKey;

	//设置变量
	m_hRegKey=NULL;

	return hRegKey;
}

//绑定键项
HKEY CRegKey::Attach(HKEY hRegKey)
{
	//效验参数
	ASSERT(hRegKey!=NULL);

	//设置变量
	m_hRegKey=hRegKey;

	return m_hRegKey;
}

//关闭键项
bool CRegKey::CloseRegKey()
{
	//关闭键项
	RegCloseKey(m_hRegKey);

	//设置变量
	m_hRegKey=NULL;

	return true;
}

//打开键项
bool CRegKey::OpenRegKey(LPCTSTR pszKeyName, bool bCreate)
{
	//效验参数
	ASSERT(pszKeyName!=NULL);

	//关闭键项
	if (m_hRegKey!=NULL) RegCloseKey(m_hRegKey);

	//生成键名
	TCHAR szFullKeyName[256]=TEXT("");
	_sntprintf(szFullKeyName,CountArray(szFullKeyName),TEXT("Software\\%s\\%s\\%s"),szProductKey,m_szMainKeyName,pszKeyName);

	//打开键项
	m_hRegKey=NULL;
	LONG lResult=RegOpenKey(HKEY_CURRENT_USER,szFullKeyName,&m_hRegKey);
	if ((lResult!=ERROR_SUCCESS)&&(bCreate==true)) lResult=RegCreateKey(HKEY_CURRENT_USER,szFullKeyName,&m_hRegKey);

	return (lResult==ERROR_SUCCESS);
}

//打开键项
bool CRegKey::OpenRegKey(LPCTSTR pszMainKeyName, LPCTSTR pszKeyName, bool bCreate)
{
	//效验参数
	ASSERT(pszKeyName!=NULL);
	ASSERT(pszMainKeyName!=NULL);

	//关闭键项
	if (m_hRegKey!=NULL) RegCloseKey(m_hRegKey);

	//生成键名
	TCHAR szFullKeyName[256]=TEXT("");
	_sntprintf(szFullKeyName,CountArray(szFullKeyName),TEXT("Software\\%s\\%s\\%s"),szProductKey,pszMainKeyName,pszKeyName);

	//打开键项
	m_hRegKey=NULL;
	LONG lResult=RegOpenKey(HKEY_CURRENT_USER,szFullKeyName,&m_hRegKey);
	if ((lResult!=ERROR_SUCCESS)&&(bCreate==true)) lResult=RegCreateKey(HKEY_CURRENT_USER,szFullKeyName,&m_hRegKey);

	return (lResult==ERROR_SUCCESS);
}

//打开键项
HKEY CRegKey::OpenItemKey(LPCTSTR pszSubKeyName)
{
	//效验参数
	ASSERT(m_hRegKey!=NULL);
	ASSERT(pszSubKeyName!=NULL);

	//打开键项
	HKEY hRegKey=NULL;
	RegOpenKey(m_hRegKey,pszSubKeyName,&hRegKey);

	return hRegKey;
}

//创建键项
HKEY CRegKey::CreateItemKey(LPCTSTR pszSubKeyName)
{
	//效验参数
	ASSERT(m_hRegKey!=NULL);
	ASSERT(pszSubKeyName!=NULL);

	//创建键项
	HKEY hRegKey=NULL;
	RegCreateKey(m_hRegKey,pszSubKeyName,&hRegKey);

	return hRegKey;
}

//枚举键项
bool CRegKey::EnumItemString(DWORD dwIndex, LPTSTR pszString, DWORD dwSize)
{
	//效验参数
	ASSERT(m_hRegKey!=NULL);

	//设置变量
	pszString[0]=0;

	//枚举键项
	LONG lResult=RegEnumKey(m_hRegKey,dwIndex,pszString,dwSize);

	return (lResult==ERROR_SUCCESS);
}

//写入数值
bool CRegKey::WriteValue(LPCTSTR pszName, DWORD dwValue)
{
	//效验参数
	ASSERT(m_hRegKey!=NULL);

	//写入数值
	LONG lResult=RegSetValueEx(m_hRegKey,pszName,0,REG_DWORD,(LPBYTE)(&dwValue),sizeof(DWORD));

	return (lResult==ERROR_SUCCESS);
}

//写入字符
bool CRegKey::WriteString(LPCTSTR pszName, LPCTSTR pszString)
{
	//效验参数
	ASSERT(m_hRegKey!=NULL);

	//写入数值
	DWORD dwDataSize=CountStringBuffer(pszString);
	LONG lResult=RegSetValueEx(m_hRegKey,pszName,0,REG_SZ,(LPBYTE)pszString,dwDataSize);

	return (lResult==ERROR_SUCCESS);
}

//写入字符
bool CRegKey::WriteEncryptString(LPCTSTR pszName, LPCTSTR pszString)
{
	//加密数据
	TCHAR szRegString[MAX_ENCRYPT_LEN+1]=TEXT("");
	CEncrypt::XorEncrypt(pszString,szRegString,CountArray(szRegString));

	//写入字符
	return WriteString(pszName,szRegString);
}

//写入数据
bool CRegKey::WriteBinary(LPCTSTR pszName, const VOID * pData, DWORD dwSize)
{
	//效验参数
	ASSERT(m_hRegKey!=NULL);

	//写入数值
	LONG lResult=RegSetValueEx(m_hRegKey,pszName,0,REG_BINARY,(LPBYTE)(pData),dwSize);

	return (lResult==ERROR_SUCCESS);
}

//读取数值
DWORD CRegKey::GetValue(LPCTSTR pszName, DWORD dwDefValue)
{
	//效验参数
	ASSERT(m_hRegKey!=NULL);

	//读取数值
	DWORD dwType=REG_NONE,dwResultSize=sizeof(DWORD),dwValue=0;
	LONG lResult=RegQueryValueEx(m_hRegKey,pszName,0,&dwType,(BYTE *)(&dwValue),&dwResultSize);
	if ((lResult!=ERROR_SUCCESS)||(dwType!=REG_DWORD)) return dwDefValue;

	return dwValue;
}

//读取数据
DWORD CRegKey::GetBinary(LPCTSTR pszName, VOID * pData, DWORD dwBufferSize)
{
	//效验参数
	ASSERT(pData!=NULL);
	ASSERT(m_hRegKey!=NULL);

	//读取数值
	DWORD dwType=REG_NONE,dwResultSize=dwBufferSize;
	LONG lResult=RegQueryValueEx(m_hRegKey,pszName,0,&dwType,(BYTE *)(pData),&dwResultSize);
	if ((lResult!=ERROR_SUCCESS)||(dwType!=REG_BINARY)) return 0;

	return dwResultSize;
}

//读取字符
DWORD CRegKey::GetString(LPCTSTR pszName, LPTSTR pszString, UINT uMaxCount)
{
	//效验参数
	ASSERT(pszString!=NULL);
	ASSERT(m_hRegKey!=NULL);

	//读取数值
	DWORD dwType=REG_NONE,dwResultSize=uMaxCount*sizeof(TCHAR);
	LONG lResult=RegQueryValueEx(m_hRegKey,pszName,0,&dwType,(BYTE *)(pszString),&dwResultSize);
	if ((lResult!=ERROR_SUCCESS)||(dwType!=REG_SZ)) return 0;

	return dwResultSize/sizeof(TCHAR);
}

//读取字符
DWORD CRegKey::GetEncryptString(LPCTSTR pszName, LPTSTR pszString, UINT uMaxCount)
{
	//效验参数
	ASSERT(pszString!=NULL);
	ASSERT(m_hRegKey!=NULL);

	//读取字符
	TCHAR szRegString[MAX_ENCRYPT_LEN+1]=TEXT("");
	GetString(pszName,szRegString,CountArray(szRegString));

	//解密数据
	CEncrypt::XorDecrypt(szRegString,pszString,uMaxCount);

	return lstrlen(pszString);
}

//删除数值
bool CRegKey::DeleteValue(LPCTSTR pszName)
{
	//效验参数
	ASSERT(m_hRegKey!=NULL);

	//删除数值
	LONG lResult=RegDeleteValue(m_hRegKey,pszName);

	return (lResult==ERROR_SUCCESS);
}

//删除键项
bool CRegKey::DeleteKey(LPCTSTR pszSubKeyName)
{
	//效验参数
	ASSERT(m_hRegKey!=NULL);
	ASSERT(pszSubKeyName!=NULL);

	//删除键项
	LONG lResult=RecurseDeleteKey(m_hRegKey,pszSubKeyName);

	return (lResult==ERROR_SUCCESS);
}

//删除键项
LONG CRegKey::DeleteKey(HKEY hParentKey, LPCTSTR pszSubKeyName)
{
	//效验参数
	ASSERT(hParentKey!=NULL);
	ASSERT(pszSubKeyName!=NULL);

	//打开键项
	HKEY hSubKey=NULL;
	LONG lResult=RegOpenKey(hParentKey,pszSubKeyName,&hSubKey);
	if (lResult!=ERROR_SUCCESS) return lResult;

	//递归删除
	TCHAR szKeyName[256];
	while (RegEnumKey(hSubKey,0,szKeyName,sizeof(szKeyName))==ERROR_SUCCESS)
	{
		//删除键项
		lResult=RecurseDeleteKey(hSubKey,szKeyName);
		if (lResult!=ERROR_SUCCESS)
		{
			RegCloseKey(hSubKey);
			return lResult;
		}
	}

	//关闭键项
	RegCloseKey(hSubKey);

	//删除键项
	lResult=RegDeleteKey(hParentKey,pszSubKeyName);

	return lResult;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值