编程词典
明日图书
明日软件
用户注册
用户登录
站内
  当前位置:编程词典服务网 >> 编程词典社区论坛 >> 基于CRegKey类操作注册表...
  · 基于CRegKey类操作注册表

用户:  大麦
发帖:  430 篇
作品:  0 个
回复:  110 篇
技术分:  1160 分
等级:  
注册:  2010-05-11 09:09:40



发表于:2010-07-13 14:07:09
          楼主

基于CRegKey类操作注册表
在Visual C++中,为了简化对注册表的操作,MFC提供了一个CRegKey类,该类封装了对注册表的相关操作。使用该类,用户可以非常方便地对注册表进行操作。CRegKey类的主要方法如下:
(1)Create
该方法用于创建所标识的键。
语法:
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 );
参数说明:
 hKeyParent:表示打开的父键句柄。
 lpszKeyName:表示键名称。
 lpszClass:表示键的类型。
 dwOptions:表示键的打开方式。为REG_OPTION_BACKUP_RESTORE,表示以备份或还原的方式打开键。为REG_OPTION_NON_VOLATILE,表示键信息在系统重启后保存到文件中,这是默认的设置,为REG_OPTION_VOLATILE,表示键信息保存在内存中,当系统关闭后,这些信息将不被保存。
 samDesired:表示访问权限。
 lpSecAttr:表示键句柄的安全属性。
 lpdwDisposition:用于返回函数执行的动作。如果为REG_CREATED_NEW_KEY,表示键不存在,函数将创建键信息。为REG_OPENED_EXISTING_KEY,表示键已存在,函数只是打开键。
(2)Open
该方法用于打开注册表键值。
语法:
LONG Open( HKEY hKeyParent, LPCTSTR lpszKeyName, REGSAM samDesired = KEY_ALL_ACCESS );
参数说明:
 hKeyParent:表示打开的父键句柄。
 lpszKeyName:表示将要打开的键名称。
 samDesired:表示键的访问权限。
(3)SetValue
该方法用于设置指定键下的项信息。
语法:
LONG SetValue( DWORD dwValue, LPCTSTR lpszValueName );
LONG SetValue( LPCTSTR lpszValue, LPCTSTR lpszValueName = NULL );
LONG SetValue( HKEY hKeyParent, LPCTSTR lpszKeyName, LPCTSTR lpszValue, LPCTSTR      lpszValueName = NULL );
参数说明:
 dwValue:表示设置的整数值。
 lpszValueName:表示设置的项名称。
 lpszValue:表示设置的字符串数据。
 hKeyParent:表示父键句柄。
 lpszKeyName:表示键名称。
 lpszValue:表示设置的项数据。
 lpszValueName:表示项名称。
(4)QueryValue
该方法用于获取指定键下的数据。
语法:
LONG QueryValue(LPCTSTR pszValueName,DWORD* pdwType, void* pData,ULONG* pnBytes);
ATL_DEPRECATED LONG QueryValue(DWORD& dwValue,LPCTSTR lpszValueName );
ATL_DEPRECATED LONG QueryValue(LPTSTR szValue,LPCTSTR lpszValueName,DWORD* pdwCount );
参数说明:
 pszValueName:表示查询的项名称。
 pdwType:整型指针,用于返回项的数据类型。
 pData:表示数据缓冲区,用于存储函数返回的数据。
 pnBytes:表示数据缓冲区pData的大小,在函数返回后,该参数表示实际返回的数据大小。
 dwValue:用于存储函数返回的整型数据。
 lpszValueName:表示查询的项名称
 szValue:表示数据缓冲区,用于存储函数返回的字符串数据。
 pdwCount:表示字符串数据的大小。
下面以一个示例来介绍如何应用CRegKey类对注册表进行操作。
例如,应用CRegKey类对注册表进行操作
(1)创建一个基于对话框的工程,工程名称为“RWReg”,设计对话框资源如图1所示。
 
图1  对话框设计窗口
(2)在对话框的源文件中引用“atlbase.h”头文件,目的是使用CRegKey类。
#include "atlbase.h"       //引用atlbase.h头文件
 注意:CRegKey类被声明在atlbase.h头文件中,默认情况下,MFC工程没有引用该头文件。因此为了应用CRegKey类,需要在工程中引用atlbase.h头文件。
(3)处理“写入”按钮的单击事件,将编辑框中的文本写入注册表中。
void CRWRegDlg::OnOK()
{
 CRegKey reg;       //定义一个CRegKey对象
 CString key;       //定义一个字符串变量
 m_KeyName.GetWindowText(key);   //回去编辑框文本
 reg.Create(HKEY_CURRENT_USER,key); //创建注册表键值
 CString item;       //定义字符串变量
 m_ItemName.GetWindowText(item);   //获取项名
 CString value;       //定义字符串变量
 m_ItemValue.GetWindowText(value);  //获取项值
 reg.SetValue(value,item);     //向注册表中写入数据
 reg.Close();       //关闭注册表键句柄
}
(4)处理“读取”按钮的单击事件,从注册表中读取数据。
void CRWRegDlg::OnLoad()
{
 CRegKey reg;       //定义一个CRegKey对象
 CString key;       //定义字符串变量
 m_KeyName.GetWindowText(key);   //获取键名
 reg.Open(HKEY_CURRENT_USER,key);  //打开注册表键值
 CString item;       //定义字符串变量
 m_ItemName.GetWindowText(item);   //获取项名
 CString value;       //定义字符串变量
 DWORD size = MAX_PATH;    //定义整型变量
 reg.QueryValue(value.GetBuffer(0),item,&size);//从注册表中读取数据
 MessageBox(value,"提示");    //以对话框形式弹出读取的数据
}
(5)运行程序,效果如图2所示。
 
图2  使用CRegKey操作注册表

 

本帖赏分:0 分   回复数:0 篇     
修改   删除   引用   回复
该帖暂无回复!
吉林省明日科技有限公司提供技术支持. 
Copyright © 1999-2008 吉林省明日科技有限公司. 吉ICP备10002740
当前时区 GMT+8, 今天是 
刷新页面 - 关于我们 - 设为首页