www.gusucode.com > VC++实现QQ自动登陆器源程序-源码程序 > VC++实现QQ自动登陆器源程序-源码程序\code\Lregedit.cpp

    //Download by http://www.NewXing.com
// Lregedit.cpp: implementation of the Lregedit class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "qqlogin.h"
#include "Lregedit.h"
#include <string>
using namespace std;


#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

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

Lregedit::~Lregedit()
{
	if(m_hKey!=NULL) RegCloseKey(m_hKey);
}

bool Lregedit::Open(HKEY hRootKey, const char* SubKeyName,bool IsCreate)
{	
	Close();
	if(RegOpenKey(hRootKey,SubKeyName,&m_hKey)==ERROR_SUCCESS)
		return true;
	
	if(IsCreate)
	{
		if(RegCreateKey(hRootKey,SubKeyName,&m_hKey)==ERROR_SUCCESS)
			return true;
	}
	
	return false;
}


void Lregedit::Close()
{
	if(m_hKey!=NULL)
	{
		if(RegCloseKey(m_hKey)==ERROR_SUCCESS) m_hKey=NULL;	
	}
	
}

string Lregedit::ReadValue(HKEY hRootkey, const char* subKeyName,const char* valueName)
{
	Close();
	if(Open(hRootkey,subKeyName,false))
	{
		DWORD dwType;
		DWORD BufSize=255;
		if(RegQueryValueEx(m_hKey,valueName,0,&dwType,0,&BufSize)!=ERROR_SUCCESS)
		{
			Close(); return "";
		}

		unsigned char* DataBuf=new unsigned char[BufSize+1];
		memset(DataBuf,0,BufSize+1);
		if(RegQueryValueEx(m_hKey,valueName,0,&dwType,DataBuf,&BufSize)!=ERROR_SUCCESS)
		{
			Close(); return "";
		}
		string strRet=(char*)DataBuf;
		delete[] DataBuf;
		return strRet;
	}
	Close(); return "";
}

bool Lregedit::SetValue(HKEY hRootKey,const char* SubKeyName,const char* ValueName,const char* Data)
{
	Close();
	if(Open(hRootKey,SubKeyName,true))
	{
		if(RegSetValueEx(m_hKey,ValueName,0,REG_SZ,(LPBYTE)Data,strlen(Data)+1)==ERROR_SUCCESS)
		{
			Close(); return true;
		}
		Close(); return false;
	}
	Close(); return false;
}

bool Lregedit::DeleteValues(HKEY hRootKey,const char* SubKeyName)
{ 
	Close(); 
	if(!Open(hRootKey,SubKeyName,false)) return false;
	
	unsigned long Subkeys;
	unsigned long Values;
	if(RegQueryInfoKey(m_hKey,0,0,0,&Subkeys,0,0,&Values,0,0,0,0)!=ERROR_SUCCESS)
		return false;
	
	char ValueNameBuf[255];
	while(Values)
	{	
		memset(ValueNameBuf,0,255);
		DWORD Len=255;
		RegEnumValue(m_hKey,0,ValueNameBuf,&Len,0,0,0,0);
		Values--;
		if(RegDeleteValue(m_hKey,ValueNameBuf)!=ERROR_SUCCESS)
		{
			Close();
			return false;
		}
	}
	
	Close();
	return true;
}

bool Lregedit::DeleteValue(HKEY hRootKey,const char* SubKeyName,const char* ValueName)
{
	Close(); 
	if(!Open(hRootKey,SubKeyName,false)) return false;
	if(RegDeleteValue(m_hKey,ValueName)!=ERROR_SUCCESS)
	{
		Close();
		return false;
	}
	Close();
	return true;
}