Chinaunix首页 | 论坛 | 博客
  • 博客访问: 3640046
  • 博文数量: 1575
  • 博客积分: 19423
  • 博客等级: 上将
  • 技术积分: 16102
  • 用 户 组: 普通用户
  • 注册时间: 2007-06-19 21:36
个人简介

专注专心

文章分类

全部博文(1575)

文章存档

2020年(10)

2018年(7)

2016年(6)

2015年(21)

2014年(32)

2013年(279)

2012年(516)

2011年(309)

2010年(260)

2009年(92)

2008年(15)

2007年(28)

我的朋友

分类: C/C++

2013-07-27 20:17:17

原文地址:注册表与INI文件 作者:enjoyfengzi1

INI文件是早期Windows 3.X系统下对系统软件和硬件进行配置的文件,主要包括了System.ini和Win.ini,在其中保存了登录硬件和软件的各种初始化信息,以便系统建立符合要求的工作环境。因为每一个设备或者应用程序都可以建立自己的INI文件,所以造成INI文件众多,为INI文件的管理增加了难度,特别是其配置都是采用局域化的方式,因此要在网络上实现远程访问几乎是不可能的。

为了克服上述问题,从Windows95起引进了注册表。为了保持Windows系统的向下兼容性,Windows9x中仍然保留了INI文件。在形式上,注册表与INI文件的区别主要有以下几点:

1、注册表采用的是二进制数据,INI文件是简单的文本形式;显然INI文件能够被众多文本编辑器所修改,所以 用起来很方便,但稳固性却由此丧失掉了,再加上文本组成的数据本身在组成更高级的数据结构方面有缺陷,许多在数据库中很容易实现的功能,在这里就变得相当麻烦了,反观二进制的方式由于必须经由专门的注册表编辑软件才能 够查询或修改信息,相对就更加安全可靠。

2、注册表支持子关键字,各级子关键字都有自己的“键值”,INI文件支持小节以及小节中的设置行参数;

3、注册表支持键下的子键,而INI文件不允许小节中再有小节;注册表中每个键都可以包括子键,从而形成目录树的结构以方便使用, 而INI文件却无法支持小节之间的嵌套,也就是说小节与小节之间都只能是平 行的关系,非常不利于信息的表达。

4、注册表的键值项可以包含可执行代码,而在INI文件中设置项只是简单的字符串;

5、注册表可以包含多拥护设置,而INI文件却不能。在Windows 3.x时 代,我们几乎没有办法在同一台计算机上实现有个性的多用户使用,而到了 windows 9x以后,这样的多用户情形就变得非常普遍了。

从功能上来说,注册表相对于INI文件具有以下优点:

1、注册表允许对软硬件和配置参数进行跟踪配置,以更好的适应软硬件;

2、注册表中登录的硬件数据可以用来支持即插即用特性;通常是在安装时进行这种检测的,但windows 98启动或原有配置改变时, 也要进行这种检测。如安装—一个新硬件时,Windows 98将检查注册表,以便确 定哪些资源已被占用,这样就可以避免新设备与原有设备之间的资源冲突。

3、注册表中的配置数据由于可以灵活的改变,因此可以更好的适应网络发展。管理人员和用户可以在网络上检查系统的配置和设置, 使得远程管理能够得以实现。

win.ini的读写:
1、::WriteProfileString("","abc","lisi");

2、CString str;
::GetProfileString("","abc","lisi",str.GetBuffer(100),100);
AfxMessageBox(str);
  
注册表编程:
1、写入注册表             
void CFileView::OnRegWrite() 
{
// TODO: Add your command handler code here
//定义注册表项句柄变量
HKEY hKey;
//创建注册表项
RegCreateKey(HKEY_LOCAL_MACHINE,"SOFTWARE\\\\abc",&hKey);
//设置注册表项的值
RegSetValue(hKey,NULL,REG_SZ,"zhangsan",strlen("zhangsan"));
//写入整型数据
DWORD dwAge=30;
RegSetValueEx(hKey,"age",0,REG_DWORD,(CONST BYTE*)&dwAge,4);
//关闭注册表项句柄
RegCloseKey(hKey);
}

2、读取注册表
void CFileView::OnRegRead() 
{
// TODO: Add your command handler code here
/* LONG lValue;
//获取将读数据的长度
RegQueryValue(HKEY_LOCAL_MACHINE,"SOFTWARE\\\\abc",NULL,&lValue);
char *pBuf=new  char[lValue];
//获取数据
RegQueryValue(HKEY_LOCAL_MACHINE,"SOFTWARE\\\\abc",pBuf,&lValue);
MessageBox(pBuf);*/
//从注册表读取整型数据
HKEY hKey;
//打开注册表
RegOpenKey(HKEY_LOCAL_MACHINE,"SOFTWARE\\\\abc",&hKey);
DWORD dwType;
DWORD dwValue;
DWORD dwAge;
RegQueryValueEx(hKey,"age",0,&dwType,(LPBYTE)&dwAge,&dwValue);
CString str;
str.Format("age=%d",dwAge);
MessageBox(str);
}


                   


                     

阅读(1656) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~