一、
问题的提出
Windows 已由原来的16位 windows 3.x 升级为现今我们使用的32位windows 95/97/98 以其 Windows NT,用户不仅在使用上应逐步适应,对于程序开发人员来说在编程技术上也应紧跟操作系统的技术发展,就如同 在 Linux 操作系统下, X-Window 编程就显得很重要一样。作为一个完整成熟的 Windows 程序,需要保存程序所有的环境变量和私有信息。诸如用户的偏好,文件装入的列表、退出时用户使用的窗口位置 .存盘历史纪录等。过去在 windows 3.x时代 ,常用 Win16函数 Get/RegWrite ProfileString 将有关
程序的信息写入 *.ini 文件,但现在该项技术由 Win32
注册表所替代。
可以这样说,注册表是当今32位 Windows 操作系统的灵魂,一切信息都在其中,也就是为什么Windows98在Windows95的基础上升级可以不重装软件等等的如此方便的应用,其原理就是根据了原注册表中的信息来完成各种方便的处理,所以Windows注册表对应用
程序的重要性就显而易见了。
原来的 Win16程序存储私有信息是在一个平面文件INI中,这样做有很多弊端,例如该INI文件没有任何安全机制,用户可以直接在INI文件中修改各种参数和程序入口,这样就可能造成不可估计的严重后果,还有该文件只能支持和文本数据不能存入二进制数据等各种不利因素,所以微软的工程师也认识到这一点,于是注册数据库就诞生了,注册数据库就是为了解决在 Windows 3.x 的一些关于 OLE 的此类问题而创建的,现在 Win32 应用程序的注册数据库通过微软带给我们的新的 Win32 API 得到了显著的改善。使用访问注册表的 Win32 函数比起使用管理 INI 文件的 Win16函数要灵活的多,这意味着在功能上将大大增强,但是,另一方面,如果你还未用过,就会对处理注册表的Win32 API 的新规则感到困惑或不知所措。本文就是本着这一目的,逐步让你懂得并掌握怎样用 Win32API 函数来处理32位 Windows
程序注册表的方法。
二 . 技术的实现原理
为了在以后自己编写的程序中更多的体现模块化思想以及使编程变得更加简单,应尽可能的建立自己实现各种功能的类,以类作为实现应用程序各种功能的单位。 在此,可以创建一个包括注册表许多常用功能而接口简单的类库,下面将建立 CMyRegKey类,对应用程序处理注册表的具体细节进行封装,从而在外部通过这个功能类方便地实现进行访问注册表信息的各种操作,在外部调用其成员函数即可。以后,你就可以在每一个应用
程序中包含此类并用其外部接口进行编程了。
三 . 实现代码与步骤
1. 建立功能类的头文件:
创建一个新的头文件 MyRegKey.h ,在其中加入以下的代码。
#include "winreg.h"
// 包含头文件 winreg.h , 因注册表Win32 API 函数在其内定义
// 建立 CMyRegKey 类:
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;
};
2. 建立功能类的Cpp文件定义 CMyRegKey类:
创建一个新文件 MyRegKey.cpp ,代码如下:
#include "MyRegKey.h"
//////////////////////////