最近在做打包的工作,应用程序的配置信息可以放在注册表文件中,但是在以前的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. Angular2学习笔记(1)

    Angular2学习笔记(1) 1. 写在前面 之前基于Electron写过一个Markdown编辑器.就其功能而言,主要功能已经实现,一些小的不影响使用的功能由于时间关系还没有完成:但就代码而言,之 ...

  2. TODO:GitHub创建组织的步骤

    TODO:GitHub创建组织的步骤 使用GitHub进行团队合作,写这个步骤主要作用是为了OneTODO作为一个团队组织进行代码的分享,让更多人来参与. 使用帐号.密码登录GitHub 2.右上角加 ...

  3. SQLServer地址搜索性能优化例子

    这是一个很久以前的例子,现在在整理资料时无意发现,就拿出来再改写分享. 1.需求 1.1 基本需求: 根据输入的地址关键字,搜索出完整的地址路径,耗时要控制在几十毫秒内. 1.2 数据库地址表结构和数 ...

  4. JavaScript常见的五种数组去重的方式

    ▓▓▓▓▓▓ 大致介绍 JavaScript的数组去重问题在许多面试中都会遇到,现在做个总结 先来建立一个数组 var arr = [1,2,3,3,2,'我','我',34,'我的',NaN,NaN ...

  5. C#文件安全管理解析

    在实际的项目开发中,我们经常需要使用到文件的I/O操作,主要包含对文件的增改删查等操作,这些基本的操作我们都是很熟悉,但是较少的人去考虑文件的安全和操作的管理等方面,例如文件的访问权限管理,文件数据的 ...

  6. seaJs学习笔记2 – seaJs组建库的使用

    原文地址:seaJs学习笔记2 – seaJs组建库的使用 我觉得学习新东西并不是会使用它就够了的,会使用仅仅代表你看懂了,理解了,二不代表你深入了,彻悟了它的精髓. 所以不断的学习将是源源不断. 最 ...

  7. 移动应用App测试与质量管理一

    测试工程师 基于Html的WebApp测试, 现在一些移动App混Html5 HTML5性能测试 兼容性 整理后的脑图 测试招聘 弱化大量技术考察 看重看问题的高度 看重潜力 测试经验 质量管理 专项 ...

  8. BPM的魅力何在?

    BPM(Business Process Management , 企业流程管理平台) 是带动企业流程自动化的帮 手,也是最能忠实反应出企业作业流程问题症结的系统工具,在管理上,BPM可以让管理者利用 ...

  9. 使用git进行源代码管理

    git是一款非常流行的分布式版本控制系统,使用Local Repository追踪代码的修改,通过Push和Pull操作,将代码changes提交到Remote Repository,或从Remote ...

  10. Linux基础介绍【第一篇】

    Linux简介 什么是操作系统? 操作系统,英文名称Operating System,简称OS,是计算机系统中必不可少的基础系统软件,它是应用程序运行以及用户操作必备的基础环境支撑,是计算机系统的核心 ...