注册表操作类 vc++


这个其实发在这里有点不合适,因为在.NET环境下本身很多数据都采用xml格式化,存储在本地,另一方面是.net的类库也非常的灵活,对注册表操作非常方便,没有必要画蛇添足来这么一个包装的类,但是如果你用 vc++, WIN32 API,做开发的时候,你会发现要对注册表操作非常的困难,更让人寒心的是,它居然没有提供对注册表键的重命名,在NTDLL.dll 中有一个可以替代的API:NTRenameKey, 但是它只有winXP之后的操作系统才提供,所以,笔者在这里提供这样一个操作类,主要是弥补了 WIN32 API 在这方面的不足。如果读者有兴趣的话可以去看 Dan Madden 写的一篇文章: http://www.codeproject.com/KB/system/NtRegistry.aspx 但是他的项目必须要用到MFC的类库,感觉不爽。

废话到此为止。
主要方法:
<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --> bool  ExistKey(HKEY hKey,  const  LPTSTR subKey)  const ; //是否存在这样一个键
 
bool  KeyRename(HKEY hKey, LPTSTR lpRootKey, LPTSTR lpOldName, LPTSTR lpNewName); // hKey 为HKEY_* 之一, lpRootKey下面的 lpOldName名字改成 lpNewName, 比如要把SOFTWARE\\*\\subkey\\TEST改成 SOFTWARE\\*\\subkey\\renamed, 参数设置应该如下: lpRootKey = SOFTWARE\\*\\subkey, lpOldName =TEST, lpNewName=renamed
bool  CopyKeyValues(HKEY hKey,  const  LPTSTR lpSourceKey,  const  LPTSTR lpDestKey)  const ; //把 lpSourceKey 键的所有值,复制给 lpDestKey
bool  DeleteKey(HKEY hKey,  const  LPTSTR lpSubKey)  const ;// 删除 lpSubKey下所有的键,子键,值
bool  HasSubKey(HKEY hKey,  const  LPTSTR lpSubKey)  const ; //是否有子键

代码下载:

我是下载链接

所有代码在vc6.0 windows XP下测试通过。

#ifndef __REGISTRY_H__ #define __REGISTRY_H__ class CRegistry { public: CRegistry(); ~CRegistry(); int m_nLastError; // CRegistry properties protected: HKEY m_hRootKey; BOOL m_bLazyWrite; CString m_strCurrentPath; public: inline BOOL PathIsValid() { return (m_strCurrentPath.GetLength() > 0); } inline CString GetCurrentPath() { return m_strCurrentPath; } inline HKEY GetRootKey() { return m_hRootKey; } //CRegistry methods public: BOOL ClearKey(); BOOL SetRootKey(HKEY hRootKey); BOOL CreateKey(CString strKey); BOOL DeleteKey(CString strKey); BOOL DeleteValue(CString strName); int GetDataSize(CString strValueName); DWORD GetDataType(CString strValueName); int GetSubKeyCount(); int GetValueCount(); BOOL KeyExists(CString strKey, HKEY hRootKey = NULL); BOOL SetKey(CString strKey, BOOL bCanCreate); BOOL ValueExists(CString strName); void RenameValue(CString strOldName, CString strNewName); // data reading functions COleDateTime ReadDateTime(CString strName, COleDateTime dtDefault); double ReadFloat(CString strName, double fDefault); CString ReadString(CString strName, CString strDefault); int ReadInt(CString strName, int nDefault); BOOL ReadBool(CString strName, BOOL bDefault); COLORREF ReadColor(CString strName, COLORREF rgbDefault); BOOL ReadFont(CString strName, CFont* pFont); BOOL ReadPoint(CString strName, CPoint* pPoint); BOOL ReadSize(CString strName, CSize* pSize); BOOL ReadRect(CString strName, CRect* pRect); DWORD ReadDword(CString strName, DWORD dwDefault); // data writing functions BOOL WriteBool(CString strName, BOOL bValue); BOOL WriteDateTime(CString strName, COleDateTime dtValue); BOOL WriteString(CString strName, CString strValue); BOOL WriteFloat(CString strName, double fValue); BOOL WriteInt(CString strName, int nValue); BOOL WriteColor(CString strName, COLORREF rgbValue); BOOL WriteFont(CString strName, CFont* pFont); BOOL WritePoint(CString strName, CPoint* pPoint); BOOL WriteSize(CString strNam
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值