/*------------------------------------Author: Ted--Nefarian ZhuDate: 2011/08/11 17:30Version: 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-----*/