MFC注册表操作
注册表简介
有时程序中要存些设置信息,一个方法就是创建一些普通的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注册表操作的更多相关文章
- MFC学习 文件操作注册表操作
c读写文件 void CFileView::OnRead() { FILE *pFile = fopen("1.txt", "r"); /*char ch[10 ...
- delphi 注册表操作(读取、添加、删除、修改)完全手册
DELPHI VS PASCAL(87) 32位Delphi程序中可利用TRegistry对象来存取注册表文件中的信息. 一.创建和释放TRegistry对象 1.创建TRegistry对象.为了操 ...
- CRegKey 注册表操作
CRegKey 注册表操作 标签: accessnulluserpathbyteie 2011-11-03 13:55 3477人阅读 评论(0) 收藏 举报 分类: win32(7) 1.简介 ...
- C# 我的注册表操作类
using System; using System.Collections.Generic; using System.Text; using Microsoft.Win32; using Syst ...
- Delphi的注册表操作
转帖:Delphi的注册表操作 2009-12-21 11:12:52 分类: Delphi的注册表操作 32位Delphi程序中可利用TRegistry对象来存取注册表文件中的信息. 一.创 ...
- C#注册表操作类--完整优化版
using System; using System.Collections.Generic; using System.Text; using Microsoft.Win32; namespace ...
- 《天书夜读:从汇编语言到windows内核编程》八 文件操作与注册表操作
1)Windows运用程序的文件与注册表操作进入R0层之后,都有对应的内核函数实现.在windows内核中,无论打开的是文件.注册表或者设备,都需要使用InitializeObjectAttribut ...
- C#注册表操作类(完整版) 整理完整
/// <summary> /// 注册表基项静态域 /// /// 主要包括: /// 1.Registry.ClassesRoot 对应于HKEY_CLASSES_ROOT主键 /// ...
- QSettings配置读写-win注册表操作-ini文件读写
版权声明:若无来源注明,Techie亮博客文章均为原创. 转载请以链接形式标明本文标题和地址: 本文标题:QSettings配置读写-win注册表操作-ini文件读写 本文地址:http:// ...
随机推荐
- Windows socket之最简单的socket程序
原文:Windows socket之最简单的socket程序 最简单的服务器的socket程序流程如下(面向连接的TCP连接 ): 1. WSAStartup(); 初始化网络库的使用. 2. soc ...
- ECLIPSE实现了界面显示所有类
按下接口名称CTRL+T实现全面实施的接口类显示 版权声明:本文博客原创文章,博客,未经同意,不得转载.
- cocos2d-x 3.1.1 学习笔记[13] listen 监听器
文章出自于 http://blog.csdn.net/zhouyunxuan //创建监听器 auto listen = EventListenerTouchOneByOne::create(); ...
- 皴EBS R12应用程序和数据库用户password
1.假设你有一个EBS周围环境APPS用户password,能够打破用户的应用程序password 参考:Oracle EBS R12下怎样破解用户password 2,假设没有APPS用户passw ...
- Visual Studio 单元测试之二---顺序单元测试
原文:Visual Studio 单元测试之二---顺序单元测试 此文是上一篇博文:Visual Studio 单元测试之一---普通单元测试的后续篇章.如果读者对Visual Studio的单元测试 ...
- 4GB内存原32位系统(x86)取舍问题,显卡共享内存Win8.1完全不用担心
情景:集成显卡 配置: 4G显示3.25GB 此时系统自动将用不到的系统完全共享给显卡(768MB而不是256): 看显卡适配器信息,完全共享给了显卡 解说:上图总可用图形内存 = 图2中备用 + 硬 ...
- Oracleclient+PLSQL Developer实现远程登录Oracle数据库
Oracle数据库功能强大.性能卓越,在造就这些长处的同一时候,也导致Oracle占内存比較多.针对这个问题,我们怎样做到取其精华去其糟粕呢? 解决方式:我们能够在局域网内的server上安装庞大的O ...
- 六大利器助Java程序开发事半功倍
实用的开发工具对于Java程序开发者来说,工作起来事半功倍.本文中小编将为大家列举包括开发环境.分析测试.代码保护等实用工具. 开发环境 Sonarqube Sonarqube是一个开源平台,是一款代 ...
- sql简单实用的统计汇总案例参考
USE [PM]GO/****** 对象: StoredProcedure [dbo].[LfangSatstics] 脚本日期: 08/24/2013 10:57:48 ******/SET ...
- Varnish 4.0
Varnish 4.0 实战 简介 Varnish 是一款高性能且开源的反向代理服务器和 HTTP 加速器,其采用全新的软件体系机构,和现在的硬件体系紧密配合,与传统的 squid 相比,varn ...