最近在做打包的工作,应用程序的配置信息可以放在注册表文件中,但是在以前的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. 【翻译】MongoDB指南/聚合——聚合管道

    [原文地址]https://docs.mongodb.com/manual/ 聚合 聚合操作处理数据记录并返回计算后的结果.聚合操作将多个文档分组,并能对已分组的数据执行一系列操作而返回单一结果.Mo ...

  2. Python标准模块--Iterators和Generators

    1 模块简介 当你开始使用Python编程时,你或许已经使用了iterators(迭代器)和generators(生成器),你当时可能并没有意识到.在本篇博文中,我们将会学习迭代器和生成器是什么.当然 ...

  3. .Net 分布式云平台基础服务建设说明概要

    1)  背景 建设云平台的基础框架,用于支持各类云服务的业务的构建及发展. 2)  基础服务 根据目前对业务的理解和发展方向,总结抽象出以下几个基础服务,如图所示 3)  概要说明 基础服务的发展会根 ...

  4. Tesseract-OCR字符识别简介

    OCR(Optical Character Recognition):光学字符识别,是指对图片文件中的文字进行分析识别,获取的过程.Tesseract:开源的OCR识别引擎,初期Tesseract引擎 ...

  5. ASP.NET Core CORS 简单使用

    CORS 全称"跨域资源共享"(Cross-origin resource sharing). 跨域就是不同域之间进行数据访问,比如 a.sample.com 访问 b.sampl ...

  6. bzoj3037--贪心

    题目大意: applepi手里有一本书<创世纪>,里面记录了这样一个故事--上帝手中有着N 种被称作"世界元素"的东西,现在他要把它们中的一部分投放到一个新的空间中去以 ...

  7. 利用poi导出Excel

    import java.lang.reflect.Field;import java.lang.reflect.InvocationTargetException;import java.lang.r ...

  8. 深入理解DOM节点操作

    × 目录 [1]创建节点 [2]插入节点 [3]移除节点[4]替换节点[5]复制节点 前面的话 一般地,提起操作会想到“增删改查”这四个字,而DOM节点操作也类似地对应于此,接下来将详细介绍DOM的节 ...

  9. 基于jQuery左右滑动切换特效 附源码

    分享一款基于脚jQuery左右滑动切换特效.这是一款鼠标点击左右箭头按钮图片滚动切换,鼠标移到图片上显示透明边框特效.   效果图如下:   废话不多说,代码奉上!   html代码: <div ...

  10. Handler

    1.1 继承AbstractController优点:能定制请求方式 package cn.happyl.controller; import javax.servlet.http.HttpServl ...