最近在做打包的工作,应用程序的配置信息可以放在注册表文件中,但是在以前的16位操作系统下,配置信息放在Win.ini文件中。下面介绍一下Win.ini文件的读写方法和注册表的编程。

先介绍下Win.ini,,win.ini是Windows系统的一个基本系统配置文件。WIN.INI文件包含若干小节,每一节由一组相关的设定组成。文件配保存了诸如影响Windows操作环境的部分、控制系统界面显示形式及窗口和鼠标器的位置、联结特定的文件类型与相应的应用程序、列出有关HELP窗口及对话窗的默认尺寸、布局、文本颜色设置等等的选项。是系统配置不可缺少的文件。

Win.ini文件的读写

PlatForm SDKWriteProfileString()函数可以写入一个字符串到Win.ini文件的制定段中

PlatForm SDKGetProfileString()函数可以从Win.ini文件中获得指定的段中制定键的字符串信息。

/**************************************************************************                    往WIN.ini文件中写入内容和读取信息  *************************************************************************/  ::WriteProfileString("name","dengyongbo","25");  char ch[100];  ::GetProfileString("name","dengyongbo","xiaoming",ch,100);  AfxMessageBox(ch);

注册表编程

但是CWinApp类的成员函数WriteProfileString()函数可以写入一个字符串到注册表的指定段中

但是CWinApp类的成员函数GetProfileString()函数可以从注册表中获得指定目录下的指定段的字符串信息。

/**************************************************************************                    往注册表中写入内容和读取信息  *************************************************************************/

WriteProfileString("name","dengyongbo","25");  CString str;  str=GetProfileString("name","dengyongbo");  AfxMessageBox(str);

注意:在应用程序类的InitInstance()函数中,有一条如下的代码:SetRegistryKey(_T("Local AppWizard-Generated Applications"));我们上面往注册表中写入的美容都在Local AppWizard-Generated Applications目录下可以找到,我们可以重写这条语句,建立我们自己的目录。

在注册表编程之前,需要了解一下注册表中某一项的存放形式,每一条注册表项由名称、类型、数据三部分构成,如下图所示:

其中需要注意的是,上面两条注册表项的内容是很不一样的,首先在二者的名称上一种是没有名称的一种是有名称的;其次二者的类型也不同REG_SZ是一种普通的类型,除此之外还有REG_DWORD、REG_DWORD_LITTLE_ENDIAN等很多类型。以上区别需要用不同的方法向注册表中写入以上内容。

(1)读写无名称的注册表数据

<1>RegCreateKey()在指定目录下创建注册表项

<2>RegSetValue()往指定的注册表项中添加数据。注意:该函数只能添加无名称的类型为REG_SZ的数据

<3>RegCloseKey()关闭注册表项

<4>RegQueryValue()获取注册表中指定项的数据。该函数的第三个参数为空第四个参数不为空的话可以用第四个参数返回注册表中指定项的数据的长度,因此可以通过连续调用两次该函数巧妙完成注册表的读写,合理分配内存大小。示例代码如下:

**************************************************************************                    往注册表中写入内容无名称并且类型为REG_SZ的数据  *************************************************************************/

HKEY hkey;

RegCreateKey(HKEY_LOCAL_MACHINE,"SOFTWARE\\dengyongbo\\age",&hkey);

RegSetValue(hkey,NULL,REG_SZ,"25",NULL);

RegCloseKey(hkey);

**************************************************************************                    从注册表中读取无名称并且类型为REG_SZ的数据  *************************************************************************/

char* pBuf;  long lvalue;

RegQueryValue(HKEY_LOCAL_MACHINE,"SOFTWARE\\dengyongbo\\age",NULL,&lvalue);

pBuf=new char[lvalue];

RegQueryValue(HKEY_LOCAL_MACHINE,"SOFTWARE\\dengyongbo\\age",pBuf,&lvalue);  MessageBox(pBuf);

(2)读写有名称的并且各种类型的注册表数据

<1>RegCreateKey()在指定目录下创建注册表项

<2>RegSetValueEx()往指定的注册表项中添加数据。注意:该函数能添加有名称和无名称以及各种类型的注册表数据

<3>RegCloseKey()关闭注册表项

<4>RegOpenKey()在读有名称的注册表数据时需先打开注册表

<5>RegQueryValueEx()接收有名称和各种类型的注册表数据

示例代码如下:

/**************************************************************************                    往注册表中写入有名称和各种类型的数据  *************************************************************************/

HKEY hkey;  DWORD dwage=30;

RegCreateKey(HKEY_LOCAL_MACHINE,"SOFTWARE\\dengyongbo\\age",&hkey);

 RegSetValueEx(hkey,"bobo",0,REG_DWORD,(const BYTE*)&dwage,4);

RegCloseKey(hkey);

/**************************************************************************                    从注册表中读取有名称和各种类型的数据  *************************************************************************/

HKEY hkey;  DWORD dwtype;  DWORD dwvalue;  DWORD dwage;  RegOpenKey(HKEY_LOCAL_MACHINE,"SOFTWARE\\dengyongbo\\age",&hkey);  RegQueryValueEx(hkey,"bobo",0,&dwtype,(LPBYTE)&dwage,&dwvalue);  CString str;  str.Format("age=%d",dwage);  MessageBox(str);

打包程序的时候,文件安装的路径要写入win.ini中,不然打开安装的程序会报Select Data Source的问题。若是在Installshield中的工程中修改了安装路径,不要忘了在读写win.ini的地方也修改。

更多关于注册表操作的函数请参看MSDN。

Win.ini和注册表的读取写入的更多相关文章

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

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

  2. c# asp.net 鼠标改变控件坐标位置,更改控件坐标,注册表保存读取,打印,查找局域网内打印机等等收集

    界面虽然被我弄的很难看,但功能还可以 里边注册表的路径自己设置一下,或者加一个创建注册表的语句,不然会报错 前台: <%@ Page Language="C#" AutoEv ...

  3. Win 通过修改注册表把CapsLock映射为Rshift

    成品: REGEDIT4     [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout] "Scancod ...

  4. Java 使用 JRegistry-1.8.1 读取和设置 windows 注册表

    在一个监控相关的Java项目中,需要读取windows系统的注册表,搜索到使用 JRegistery 可以解决.代码如下: /** * @author digdeep@126.com */ publi ...

  5. VC++操作注册表(创建,读取,更改,删除)

    #include "stdafx.h" #include <Windows.h> #include <iostream> using namespace s ...

  6. Delphi的注册表操作

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

  7. C#注册表的读,写,删除,查找

    首先分享一下写入,这个最常用的 public bool WriteRegedit()     {         try         {             RegistryKey rk = ...

  8. windows 注册表编程

    例子:将本地计算机的Monitor ID写入到注册表中 (1)获取MonitorID BOOLEAN DeviceMonitorService::EnumClassDevice(const GUID ...

  9. C#操作注册表全攻略

    相信每个人对注册表并不陌生,在运行里面输入“regedit”就可以打开注册表编辑器了.这东西对Windows系统来说可是比较重要的,也是病 毒常常会光顾的地方,比如病毒和恶意软件常常会在注册表的启动项 ...

随机推荐

  1. 消息队列——RabbitMQ学习笔记

    消息队列--RabbitMQ学习笔记 1. 写在前面 昨天简单学习了一个消息队列项目--RabbitMQ,今天趁热打铁,将学到的东西记录下来. 学习的资料主要是官网给出的6个基本的消息发送/接收模型, ...

  2. 读书笔记:JavaScript DOM 编程艺术(第二版)

    读完还是能学到很多的基础知识,这里记录下,方便回顾与及时查阅. 内容也有自己的一些补充. JavaScript DOM 编程艺术(第二版) 1.JavaScript简史 JavaScript由Nets ...

  3. [原] KVM 虚拟化原理探究(1)— overview

    KVM 虚拟化原理探究- overview 标签(空格分隔): KVM 写在前面的话 本文不介绍kvm和qemu的基本安装操作,希望读者具有一定的KVM实践经验.同时希望借此系列博客,能够对KVM底层 ...

  4. ABP文档 - 嵌入的资源文件

    文档目录 本节内容: 简介 创建嵌入的文件 暴露嵌入的文件 使用嵌入的文件 简介 一个web应用里,客户端包含javascript,css,xml等文件,这此文件被添加到一个web项目后,发布成独立的 ...

  5. 使用webstorm+webpack构建简单入门级“HelloWorld”的应用&&引用jquery来实现alert

    使用webstorm+webpack构建简单入门级"HelloWorld"的应用&&构建使用jquery来实现 1.首先你自己把webstorm安装完成. 请参考这 ...

  6. 06.SQLServer性能优化之---数据库级日记监控

    汇总篇:http://www.cnblogs.com/dunitian/p/4822808.html#tsql 之前说了一下数据库怎么发邮件:http://www.cnblogs.com/duniti ...

  7. 【.net 深呼吸】程序集的热更新

    当一个程序集被加载使用的时候,出于数据的完整性和安全性考虑,程序集文件(在99.9998%的情况下是.dll文件)会被锁定,如果此时你想更新程序集(实际上是替换dll文件),是不可以操作的,这时你得把 ...

  8. lua执行字节码的过程介绍

    前面一篇文章中介绍了lua给下面代码生成最终的字节码的整个过程,这次我们来看看lua vm执行这些字节码的过程. foo = "bar" local a, b = "a& ...

  9. MySQL数据库和InnoDB存储引擎文件

    参数文件 当MySQL示例启动时,数据库会先去读一个配置参数文件,用来寻找数据库的各种文件所在位置以及指定某些初始化参数,这些参数通常定义了某种内存结构有多大等.在默认情况下,MySQL实例会按照一定 ...

  10. 浅谈Java的throw与throws

    转载:http://blog.csdn.net/luoweifu/article/details/10721543 我进行了一些加工,不是本人原创但比原博主要更完善~ 浅谈Java异常 以前虽然知道一 ...