自己写的一个注册表操作类----相当实用

/*------------------------------------
Author:   Ted--Nefarian Zhu
Date:     2011/08/11 17:30
Version:  V1.03 All rights reserved !
Life sucks,but we all have to move on!
------------------------------------*/

#ifndef CREG_H
#define CREG_H
#include <windows.h>
class CReg
{
private:
    HKEY m_hKey;
    
public:
    CReg();
    ~CReg();
    LONG Open(HKEY hKeyParent, LPCTSTR lpszKeyName, REGSAM samDesired);
    LONG Close();
    
    LONG Create(HKEY hKeyParent, LPCTSTR lpszKeyName,
	     LPTSTR lpszClass = REG_NONE, 
         DWORD dwOptions = REG_OPTION_NON_VOLATILE,
	     REGSAM samDesired = KEY_ALL_ACCESS,
	     LPSECURITY_ATTRIBUTES lpSecAttr = NULL,
	     LPDWORD lpdwDisposition = NULL); 
     
    LONG DeleteSubKey(LPCTSTR lpszSubKey);           
    LONG SetValue(DWORD dwValue, LPCTSTR lpszValueName);
    LONG SetValue(LPCTSTR lpszValue, LPCTSTR lpszValueName);
    LONG DeleteValue(LPCTSTR lpszValue);
	LONG QueryValue(DWORD& dwValue, LPCTSTR lpszValueName);
	LONG QueryValue(LPTSTR szValue, DWORD* pcbData, LPCTSTR lpszValueName);                               
};


CReg::CReg()
{m_hKey = NULL;}


CReg::~CReg()
{Close();}


LONG CReg::Open(HKEY hKeyParent, LPCTSTR lpszKeyName, REGSAM samDesired)
{
	assert(hKeyParent != NULL);
	HKEY hKey = NULL;
	LONG lRes = RegOpenKeyEx(hKeyParent, lpszKeyName, 0, samDesired, &hKey);
	if (lRes == ERROR_SUCCESS)
	{
		lRes = Close();
		assert(lRes == ERROR_SUCCESS);
		m_hKey = hKey;
	}
	return lRes;
}


LONG CReg::Close()
{
	LONG lRes = ERROR_SUCCESS;
	if (m_hKey != NULL)
	{
		lRes = RegCloseKey(m_hKey);
		m_hKey = NULL;
	}
	return lRes;
}


LONG CReg::Create(HKEY hKeyParent, LPCTSTR lpszKeyName,
	LPTSTR lpszClass, DWORD dwOptions, REGSAM samDesired,
	LPSECURITY_ATTRIBUTES lpSecAttr, LPDWORD lpdwDisposition)
{
	assert(hKeyParent != NULL);
	DWORD dw;
	HKEY hKey = NULL;
	LONG lRes = RegCreateKeyEx(hKeyParent, lpszKeyName, 0,
		lpszClass, dwOptions, samDesired, lpSecAttr, &hKey, &dw);
	if (lpdwDisposition != NULL)
		*lpdwDisposition = dw;
	if (lRes == ERROR_SUCCESS)
	{
		lRes = Close();
		m_hKey = hKey;
	}
	return lRes;
}


LONG CReg::DeleteSubKey(LPCTSTR lpszSubKey)
{
	assert(m_hKey != NULL);
	return RegDeleteKey(m_hKey, lpszSubKey);
}


LONG CReg::SetValue(DWORD dwValue, LPCTSTR lpszValueName)
{
	assert(m_hKey != NULL);
	return RegSetValueEx(m_hKey, lpszValueName, 0, REG_DWORD,
		(BYTE * const)&dwValue, sizeof(DWORD));
}


LONG CReg::SetValue(LPCTSTR lpszValue, LPCTSTR lpszValueName)
{
	assert(lpszValue != NULL);
	assert(m_hKey != NULL);
	return RegSetValueEx(m_hKey, lpszValueName, 0, REG_SZ,
		(BYTE * const)lpszValue, (lstrlen(lpszValue)+1)*sizeof(TCHAR));
}


LONG CReg::DeleteValue(LPCTSTR lpszValue)
{
	assert(m_hKey != NULL);
	return RegDeleteValue(m_hKey, (LPTSTR)lpszValue);
}


LONG CReg::QueryValue(DWORD& dwValue, LPCTSTR lpszValueName)
{
	DWORD dwType = 0;
	DWORD dwCount = sizeof(DWORD);
	LONG lRes = RegQueryValueEx(m_hKey, (LPTSTR)lpszValueName, NULL, &dwType,
		(LPBYTE)&dwValue, &dwCount);
	assert((lRes!=ERROR_SUCCESS) || (dwType == REG_DWORD));
	assert((lRes!=ERROR_SUCCESS) || (dwCount == sizeof(DWORD)));
	return lRes;
}

LONG CReg::QueryValue(LPTSTR szValue, DWORD* pcbData, LPCTSTR lpszValueName)
{
	assert(pcbData != NULL);
	DWORD dwType = 0;
	LONG lRes = RegQueryValueEx(m_hKey, (LPTSTR)lpszValueName, NULL, &dwType,
		(LPBYTE)szValue, pcbData);
	assert((lRes!=ERROR_SUCCESS) || (dwType == REG_SZ) ||
			 (dwType == REG_MULTI_SZ) || (dwType == REG_EXPAND_SZ));
	return lRes;
}



#endif		/*-----CREG_H-----*/







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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值