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

来源:互联网 发布:c语言进制转换库函数 编辑:程序博客网 时间:2024/05/01 01:03
/*------------------------------------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-----*/