zoukankan      html  css  js  c++  java
  • Win.ini和注册表的读取写入

    最近在做打包的工作,应用程序的配置信息可以放在注册表文件中,但是在以前的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。

    感谢您的阅读,若有不足之处,欢迎指教,共同学习、共同进步。 博主网址:http://www.cnblogs.com/ChinacloudTech/ 独立博客:http://futuretechx.com 如您喜欢,麻烦推荐一下;如您有新想法,欢迎提出,邮箱:1145356699@qq.com。 本博客为博主原创,欢迎转载,但必须注明博客来源。 更多关于游戏开发的内容也可关注微信公众号:微浪游戏
  • 相关阅读:
    window下配置ssh key
    Mysqldump记录
    WordPress插件入口菜单创建的位置代码
    阿里大鱼发送短信使用记录
    SpringMVC–SSH -- RESTful -- JSR303
    Spring MVC程序中得到静态资源文件css,js,图片
    包机项目源码分析笔记
    myeclipse中java文件头注释格式设置
    oracle扩展dblink数。
    linux--解决oracle sqlplus 中上下左右backspace不能用
  • 原文地址:https://www.cnblogs.com/ChinacloudTech/p/6211862.html
Copyright © 2011-2022 走看看