个人理解注册表的本质也是一个数据库,Windows很多硬件,软件等信息都保存到注册表中,保存到注册表里的数据不易丢失,在保存数据到注册表之前,首先要明白注册表的结构是怎样的
1,注册表结构
在开始处输入regedit,选择regedit.exe,打开后看到的就是整个系统的注册表
可以看到有五个文件夹,这五个文件夹分别为:
HKEY_CLASSES_ROOT 存储Windows可识别的文件类型的详细列表,以及相关联的程序。
HKEY_CURRENT_USER 存储当前用户设置的信息。
HKEY_LOCAL_MACHINE 包括安装在计算机上的硬件和软件的信息。
HKEY_USERS 包含使用计算机的用户的信息。
HKEY_CURRENT_CONFIG 这个分支包含计算机当前的硬件配置信息。
一般用户保存应用程序数据都在HKEY_CURRENT_USER中的Software下。
注册表内结构为:根键,子键,键值。
①根键,一共五个,HKEY_CLASSES_ROOT, HKEY_CURRENT_USER,HKEY_LOCAL_MACHINE,HKEY_USERS和HKEY_CURRENT_CONFIG;
② 子键,子键下可以有多个子键,即文件夹。
③键值,键值表示一个文件,该文件有三个部分:名称,类型,数据。
文件的类型有以下几种:
REG_SZ 字符串 文本字符串
REG_MULTI_SZ 多字符串 含有多个文本值的字符串
REG_BINARY 二进制数 二进制值,以十六进制显示。
REG_DWORD 双字 一个32位的二进制值,显示为8位的十六进制值。
2,保存注册表方法
mfc操作注册表首先要在注册表中注册子键项,
SetRegistryKey(_T("子键项名")); //注册子键
WriteProfileInt("子键","键值",数据); //保存到注册表,类型为Int
WriteProfileString("子键", "键值" ,数据); //保存到注册表,类型为String
3,获取注册表方法
GetProfileString("子键", "键值");
GetProfileInt("子键", "键值",0); //int类型,0表示当获取注册表数据为空时,默认值为0,,可自由设置
下面给出一个例子,保存txt文件路径名保存在注册表并获取
首先,保存到注册表代码如下:
新建一个MFC项目,名为BarCodeMark,
在代码中添加:
SetRegistryKey(_T("Local AppWizard-Generated Applications"));//在注册表中注册一个子键项
void SaveTxtName1(); //声明保存txt文件路径名方法
CString m_strTxtName1; //定义保存在注册表中的txt文件名
m_strTxtName1 = "C:\\Users\Administrator\Desktop\测试txt\测试码2";
void CMSI_VC_DemoApp::SaveTxtName1() //定义保存txt文件名函数SaveTxtName()
{
WriteProfileString(_T("D_TxtName"), _T("TxtName1"), m_strTxtName1);
//D_TxtName为注册表中键值,
//TxtName1为要保存到注册表中的名称
//将m_strTxtName赋值给TxtName1
}
运行后,打开注册表查看
①注册的子键名
②子键,MFC项目名
③键值
可以看到文件路径名已经保存到注册表中键值D_TxtName中了,结构为
名称:TxtName1
类型:REG_SZ 字符串
数据:C:\\Users\Administrator\Desktop\测试txt\测试码2
获取注册表数据代码如下:
m_strTxtName1 = GetProfileString(_T("D_TxtName"), _T("TxtName1")); //获取txt文件名
-------------------------------------------------------------END-----------------------------------------------------------------------------