注册表简介

有时程序中要存些设置信息,一个方法就是创建一些普通的txt或xml文件,然后保存进去就行了.另一办法就是保存到注册表里.注册表是由windows维护的一个小数据库.里面也会保存windows本身的很多配置信息.

我们在命令行通过regedit可以手动打开注册表查看相关信息.在页面上我们会看到左边有很多树形结构的内容,我们可以简单的把它等同于目录.最顶端的5个根键所包括的内容分别是

1.)HKEY_CLASSES_ROOT

定义了系统中所有文件类型标志和基本操作标志.

 2.)HKEY_CURRENT_USER

当前用户的配置信息,包括环境变量、桌面设置、网络连接,软件运行信息等

 3.)HKEY_LOCAL_MACHINE

本机相关的系统信息,包括硬件信息,驱动信息,内存数据,总线数据等等。

4.) HKEY_USER

这里记录了本机器上所有用户的设置

5.)KKEY_CURRENT_CONFIG

包括字体、BIOS、操作系统、打印机等四项的配置信息。该字段是HKEY_LOCAL_MACHINE\Config的副本

其中1,4,5,项根键我们一般只是读取一些信息.而2,3两项根键下就会写入一些应用程序自己的配置信息.所以用的最多的是这两个位置

HKEY_CURRENT_USER \ SOFTWARE

HKEY_LOCAL_MACHINE \ SOFTWARE

应用程序配置信息一般保存在哪里

刚说了我们一般在HKEY_LOCAL_MACHINE,HKEY_CURRENT_USER这两个下面放自己应用程序的配置信息.那这两者有啥区别呢?

放在HKEY_CURRENT_USER中的信息只有当前用户能看到,如果log off换个用户就不到了.而放HKEY_LOCAL_MACHINE下面的信息所有用户都能看到.

不过我们平时自己一个人用的电脑基本上也不会去整多个用户登陆.这时配置信息随便放哪在我们看来貌似一样的.

不过打开注册表一看我们发现平时用的大部分软件都是把配置信息放HKEY_CURRENT_USER\ SOFTWARE下.

当然如果你想写些其他信息不想被别人很容易找到的,可以找个啥偏点的地方藏起来啊.

注册表键值内容

我们看到的那一层层树形结构,就像一个个目录一样,它本身就是起组织内容的作用.而我们真正需要的信息是在目录的最后一层.打开后我们会在右边看到三列

Name , Type , Data 其中的Type只是起描述作用,帮助你理解.所以真正用到的是Name , Data看到两个值想到MFC中的CMap类了吧,name就是键名,data是键值.

我猜windows保存注册表里的信息时就用CMap这样的类型的.

这里的Type我们也可以看成编程语言中的数据类型,Name就是变量名,Data是变量的值.注册表里常用的类型是REG_SZ,可以简单的看成是个字符串像Char* 或者CString这样的.

另一个是REG_DWORD,这保存的是数值,就可以看成DWORD (unsigned long)

MFC中操作注册表主要是CRegKey这个类.

CRegKey的用法

创建函数

有点类似于创建一个目录供往里面写文件一样.

CRegKey key;

key.Create(HKEY_CURRENT_USER, _T("SOFTWARE\\ArwenSoft"));

key.Close();

打开并添加值

int iMaxNumber = 100;

BOOL bOpenReg = key.Open(HKEY_CURRENT_USER, _T("SOFTWARE\\ArwenSoft"));

//实际上我们有时真需要把密码保存到注册表时可不能明码保存,先得把密码加密后再保存,读取时再解密.

key.SetStringValue(_T("Password"), _T("123"));

key.SetDWORDValue(_T("count"),iMaxNumber);

key.Close();

查看注册表信息

DWORD dwNum;

BOOL bOpenReg = key.Open(HKEY_CURRENT_USER, _T("SOFTWARE\\ArwenSoft"));

key.QueryDWORDValue(_T("count"),dwNum); //或者key.QueryValue(dwNum,_T("count"));

删除信息

key.DeleteValue(_T("count"));

MFC操作注册表便捷方式

除了使用CRegKey类直接操作注册表,MFC框架还提供了个便捷的方式.

MFC的入口点,继承自CWinApp的那个类中有个InitInstance函数.我们新建一个project时,该函数默认生成这样一行代码

SetRegistryKey(_T("Local AppWizard-Generated Applications"));

这里就是在HKEY_CURRENT_USER \ SOFTWARE 下面新建一个项.你可以把名字改成其他任意值.比如注释掉上面那行代码,改成这样

SetRegistryKey(_T("ArwenProduct"));

在这里这样设置后,以后查看或往注册表添加信息就非常简单了.

往注册表写信息就是

WriteProfileString(_T("Settings"),_T("Password"),_T("123")); //写入字符串值

WriteProfileInt(_T("settings"),_T("count"),123); //写入数字

其中第一个参数相当于在前面的ArwenProduct下面再生成新的项,.然后第二个参数是值名,第三个是键值.当然如果你还想多几层项,可以样

WriteProfileString(_T("ConfigInfo\\Settings"),_T("Password"),_T("123")); //写入字符串值

读取注册表信息

CString strPwd = GetProfileString(_T("settings"),_T("pwd"));

int num = GetProfileInt(_T("settings"),_T("count"));

不过这些函数是CWinApp的成员函数.在其他地方用,得这样

AfxGetApp()->GetProfileString

AfxGetApp()可以得CWinApp的指针

MFC注册表操作的更多相关文章

  1. MFC学习 文件操作注册表操作

    c读写文件 void CFileView::OnRead() { FILE *pFile = fopen("1.txt", "r"); /*char ch[10 ...

  2. delphi 注册表操作(读取、添加、删除、修改)完全手册

    DELPHI VS PASCAL(87)  32位Delphi程序中可利用TRegistry对象来存取注册表文件中的信息. 一.创建和释放TRegistry对象 1.创建TRegistry对象.为了操 ...

  3. CRegKey 注册表操作

    CRegKey 注册表操作 标签: accessnulluserpathbyteie 2011-11-03 13:55 3477人阅读 评论(0) 收藏 举报  分类: win32(7)  1.简介 ...

  4. C# 我的注册表操作类

    using System; using System.Collections.Generic; using System.Text; using Microsoft.Win32; using Syst ...

  5. Delphi的注册表操作

    转帖:Delphi的注册表操作 2009-12-21 11:12:52 分类: Delphi的注册表操作 32位Delphi程序中可利用TRegistry对象来存取注册表文件中的信息.     一.创 ...

  6. C#注册表操作类--完整优化版

    using System; using System.Collections.Generic; using System.Text; using Microsoft.Win32; namespace ...

  7. 《天书夜读:从汇编语言到windows内核编程》八 文件操作与注册表操作

    1)Windows运用程序的文件与注册表操作进入R0层之后,都有对应的内核函数实现.在windows内核中,无论打开的是文件.注册表或者设备,都需要使用InitializeObjectAttribut ...

  8. C#注册表操作类(完整版) 整理完整

    /// <summary> /// 注册表基项静态域 /// /// 主要包括: /// 1.Registry.ClassesRoot 对应于HKEY_CLASSES_ROOT主键 /// ...

  9. QSettings配置读写-win注册表操作-ini文件读写

    版权声明:若无来源注明,Techie亮博客文章均为原创. 转载请以链接形式标明本文标题和地址: 本文标题:QSettings配置读写-win注册表操作-ini文件读写     本文地址:http:// ...

随机推荐

  1. 七牛云存储C#例用小例子 C#笔记

    最近有需求要把网站的图片传到云存储上去.于是就找到了七牛.看上面的SDK...看了才发现里面注释很少.当时看的头大.在网上搜一下,基本上没有好的例子.给初学者带来很大的不便!不过最后还是做出来了.在这 ...

  2. Enum:枚举

    原文:Enum:枚举 枚举 (enum) 是值类型的一种特殊形式,它从 System.Enum 继承而来,并为基础的基元类型的值提供替代名称.枚举类型有名称.基础类型和一组字段.基础类型必须是一个内置 ...

  3. TML5安全:CORS(跨域资源共享)简介

    来源:http://blog.csdn.net/hfahe/article/details/7730944 前言:像CORS对于现代前端这么重要的技术在国内基本上居然很少有人使用和提及,在百度或者Go ...

  4. Js创建对象的做法

    1.对象工具包 <html> <head> <meta http-equiv="Content-Type" content="text/ht ...

  5. GRIDDATA(表格)第二版

    JQUERY 插件开发——GRIDDATA(表格)第二版 开发背景 表格插件之前我也写个一篇,当时写那个插件的时候,我自己还没有总结出写插件的方法,虽然功能实现了,但是使用起来还是有点别扭的,并且需要 ...

  6. Ora中select某时间段记录sql语句

    要查找某时间段的记录,例如查找2013-11-1到2013-11-30的记录. ' group by user_name, user_id 注意:SQL语句中含有sum累加函数,末尾要加group b ...

  7. 无线连接手机进行Android测试

    当每天走到哪都要拿一根数据线进行项目测试的时候,总是有一些焦急和烦躁的,如果能够无线连接测试就在好不过了. 这样不再是什么难事了,只需要几步走: 在进行无线连接测试的过程中,你的手机必须root了,这 ...

  8. TodoList开发笔记 – Part Ⅲ

    本节开始对TodoList项目的客户端进行开发 一.初步了解JQuery 其实我在学校时有接触过一段时间的Web开发,虽然代码量不多也不复杂,但也已经感受到了各浏览器对Web各项标准的恶意,Web界对 ...

  9. des和Rijndael加密

    ------------IV的作用: 为了保证数据的安全,.NET基类库中提供的私钥算法类使用称作密码块链(CBC,Cipher Block Chaining)的链模式,算法使用一个密钥和一个初始化向 ...

  10. mysql 备份数据

    想在mysql库中某些数据备份下来. 1,创建一个新表,我们应需要保持表的原有属性 CREATE TABLE A LIKE B 这种方式可以把主键和索引一起copy过来. 2,把需要数据copy到新表 ...