#include <winreg.h> // =================================================================== // 用法 : // 1、 打开注册表路径 . // CMyRegKey regKey1,regKey2,regKey3; // regKey1.RegOpen(HKEY_LOCAL_MACHINE,_T("Software//Microsoft//Windows//CurrentVersion")); // regKey2.RegOpen(HKEY_LOCAL_MACHINE,_T("Software//Microsoft//Windows//CurrentVersion")); // regKey3.RegOpen(HKEY_LOCAL_MACHINE,_T("Software//Microsoft//Windows//CurrentVersion")); // 2、读取键值并分别传递到编辑控件参数中去: // regKey1.RegRead(_T("Version"),m_Version); // regKey2.RegRead(_T("RegisteredOwner"),m_UserID); // regKey3.RegRead(_T("SystemRoot"),m_Install); // 3、传递从编辑拦输入的值并写入打开路径的指定键值名中: // regKey.RegWrite(_T("RegisteredOwner"),m_UserID); // class CMyRegKey { // Construction public: CMyRegKey(); virtual ~CMyRegKey (); // Attributes public: // 定义打开和关闭注册表的成员函数: LONG RegRegOpen(HKEY hKeyRoot,LPCTSTR pszPath); void RegRegClose(); // 利用函数重载实现对注册表键值(串值,二进制值,DWORD值 ) 的读和写: LONG RegRead (LPCTSTR pszKey,DWORD& dwVal); LONG RegRead (LPCTSTR pszKey,CString& sVal); LONG RegRead (LPCTSTR pszKey,BYTE *pData,DWORD& dwLength); LONG RegWrite (LPCTSTR pszKey,DWORD dwVal); LONG RegWrite (LPCTSTR pszKey,LPCTSTR pszVal); LONG RegWrite (LPCTSTR pszKey,const BYTE *pData,DWORD dwLength); protected: HKEY m_hKey; CString m_sPath; }; / // CMyRegKey / CMyRegKey:: CMyRegKey() { m_hKey = NULL; } CMyRegKey:: ~CMyRegKey() { RegClose(); } // 定义打开注册表的函数,RegOpen 函数带有两个参数:指定要访问注册表根结点的 HKEY, 及注 // 册表中信息的全路径。如果给入的路径不存在,则需创建一个新路径。从 RegCreateKeyEx API函数返// 回的 HKEY 作为 m_hKey 存储。 LONG CMyRegKey::RegOpen(HKEY hKeyRoot,LPCTSTR pszPath) { DWORD dw; m_sPath = pszPath; return RegCreateKeyEx(hKeyRoot,pszPath,0L,NULL,REG_OPTION_VOLATILE,KEY_ALL_ACCESS,NULL, &m_hKey,&dw); } void CMyRegKey::RegClose() { if(m_hKey) { RegCloseKey (m_hKey); m_hKey = NULL; } } LONG CMyRegKey::RegWrite(LPCTSTR pszKey,DWORD dwVal) { ASSERT(m_hKey); ASSERT(pszKey); ASSERT(pData&&dwLength>0); ASSERT(AfxIsValidAddress(pData,dwLength,FALSE)); return RegSetValueEx(m_hKey,pszKey,0L,REG_DWORD,(CONST BYTE *)&dwVal,sizeof(DWORD)); } LONG CMyRegKey::RegWrite(LPCTSTR pszKey,LPCTSTR pszData) { ASSERT(m_hKey); ASSERT(pszKey); ASSERT(pszData); ASSERT(pData&&dwLength>0); ASSERT(AfxIsValidAddress(pszData,strlen(pszData),FALSE)); return RegSetValueEx(m_hKey,pszKey,0L,REG_SZ,(CONST BYTE *)pszData,strlen (pszData)+1); } LONG CMyRegKey::RegWrite(LPCTSTR pszKey,const BYTE *pData,DWORD dwLength) { ASSERT(m_hKey); ASSERT(pszKey); ASSERT(AfxIsValidAddress (pData,dwLength,FALSE)); ASSERT(pData&&dwLength>0); ASSERT(AfxIsValidAddress(pData,dwLength,FALSE)); return RegSetValueEx(m_hKey,pszKey,0L,REG_BINARY,pData,dwLength); } LONG CMyRegKey::RegRead (LPCTSTR pszKey,DWORD& dwVal) { ASSERT(m_hKey); ASSERT(pszKey); DWORD dwType; DWORD dwSize = sizeof (DWORD); DWORD dwDest; LONG LRet = RegQueryValueEx(m_hKey,(LPSTR)pszKey,NULL,&dwType,(BYTE *) &dwDest,&dwSize); if(LRet==ERROR_SUCCESS) dwVal = dwDest; return LRet; } LONG CMyRegKey::RegRead (LPCTSTR pszKey,CString& sVal) { ASSERT(m_hKey); ASSERT(pszKey); DWORD dwType; DWORD dwSize = 200; char string[200]; LONG IReturn = RegQueryValueEx(m_hKey,(LPSTR)pszKey,NULL,&dwType,(BYTE *) string,&dwSize); if(IReturn==ERROR_SUCCESS) sVal = string; return IReturn; } LONG CMyRegKey::RegRead (LPCTSTR pszKey,BYTE * pData,DWORD& dwLen) { ASSERT(m_hKey); ASSERT(pszKey); DWORD dwType; return RegQueryValueEx(m_hKey,(LPSTR)pszKey,NULL,&dwType,pData,&dwLen); }