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; }