xxx.h头文件
#pragma once
#include <winreg.h>
class CRegedit
{
public:
LONG Read(LPCTSTR pszKey , BYTE *pData , DWORD & dwLength);
LONG Read(LPCTSTR pszKey, CString sVal);
LONG Read(LPCTSTR pszKey , DWORD & dwVal);
LONG Write(LPCTSTR pszKey , const BYTE *pData , DWORD dwLength);
LONG Write(LPCTSTR pszKey , LPCTSTR pszVal);
LONG Write(LPCTSTR pszKey , DWORD dwVal);
void Close();
LONG Open(HKEY hKeyRoot , LPCTSTR pszPath , REGSAM dwAccess = KEY_ALL_ACCESS);
CRegedit(void);
~CRegedit(void);
protected:
CString m_sPath;
HKEY m_hKey;
};
//源文件
#include "StdAfx.h"
#include "Regedit.h"
CRegedit::CRegedit(void)
{
m_hKey = NULL;
}
CRegedit::~CRegedit(void)
{
Close();
}
LONG CRegedit::Open(HKEY hKeyRoot,LPCTSTR pszPath,REGSAM dwAccess)
{
DWORD dw;
m_sPath = pszPath;
return RegCreateKeyEx(hKeyRoot,pszPath,0L,NULL,REG_OPTION_NON_VOLATILE,dwAccess,NULL,&m_hKey,&dw);
}
void CRegedit::Close()
{
if(m_hKey)
{
RegCloseKey(m_hKey);
m_hKey = NULL;
}
}
LONG CRegedit::Write(LPCTSTR pszKey, DWORD dwVal)
{
ASSERT(m_hKey);
ASSERT(pszKey);
return RegSetValueEx(m_hKey,pszKey,0L,REG_DWORD,(CONST BYTE *)&dwVal,sizeof(DWORD));
}
LONG CRegedit::Write(LPCTSTR pszKey, LPCTSTR pszVal)
{
ASSERT(m_hKey);
ASSERT(pszKey);
ASSERT(pszVal);
ASSERT(AfxIsValidAddress(pszVal,strlen(pszVal),FALSE));
return RegSetValueEx(m_hKey,pszKey,0L,REG_SZ,(CONST BYTE*)pszVal,CString(pszVal).GetLength()+1);
}
LONG CRegedit::Write(LPCTSTR pszKey, const BYTE *pData, DWORD dwLength)
{
ASSERT(m_hKey);
ASSERT(pszKey);
ASSERT(pData && dwLength> 0);
ASSERT(AfxIsValidAddress(pData , dwLength , FALSE));
return RegSetValueEx(m_hKey , pszKey , 0L , REG_BINARY , pData , dwLength);
}
LONG CRegedit::Read(LPCTSTR pszKey, DWORD &dwVal)
{
ASSERT(m_hKey);
ASSERT(pszKey);
DWORD dwType;
DWORD dwSize = sizeof(DWORD);
DWORD dwDest;
LONG lRet = RegQueryValueEx(m_hKey , pszKey , NULL , &dwType , (LPBYTE) &dwDest , &dwSize);
if(lRet == ERROR_SUCCESS)
dwVal = dwDest;
return lRet;
}
LONG CRegedit::Read(LPCTSTR pszKey,CString sVal)
{
ASSERT(m_hKey);
ASSERT(pszKey);
DWORD dwType;
DWORD dwSize = 512;
// char string[512] ;
LPBYTE string;
LONG lRet = RegQueryValueEx(m_hKey,pszKey,NULL,&dwType,string, &dwSize);
if(lRet == ERROR_SUCCESS)
{
sVal = string;
}
return lRet;
}
LONG CRegedit::Read(LPCTSTR pszKey, BYTE *pData, DWORD &dwLength)
{
ASSERT(m_hKey);
ASSERT(pszKey);
DWORD dwType;
return RegQueryValueEx(m_hKey,pszKey,NULL,&dwType,pData,&dwLength);
}
//======================================
//使用举例:
void Cdemo_print_win32_cDlg::OnBnClickedButton5()
{
// TODO: Add your control notification handler code here
CRegedit reg;
CString str = NULL;
// HKEY hkey;
//RegCreateKeyEx(L"HKEY_LOCAL_MACHINE",L"HARDWARE\\DEVICEMAP\\SERIALCOMM",0L,NULL,REG_OPTION_NON_VOLATILE,KEY_READ| KEY_WRITE,)
LPBYTE aaa = (LPBYTE)"sdfasdfsdf";
reg.Open(HKEY_LOCAL_MACHINE,L"HARDWARE\\DEVICEMAP\\SERIALCOMM",KEY_READ|KEY_WRITE);
if(reg.Read(_T("\\Device\\VCom15"),str)!=ERROR_SUCCESS)
MessageBox(L"READ failed");
else
MessageBox(str,0,0);
// if(reg.Write(L"NewItem1",L"B")!=ERROR_SUCCESS)
// MessageBox(L"Write failed");
reg.Close();
}