VC++ MFC中如何将应用程序的配置信息保存到注册表中(一)

摘要:
注册表是Microsoft Windows中的一个重要数据库,用于存储系统和应用程序设置。关闭记事本时,位置和大小信息将保存到注册表中。下次打开记事本时,我们从注册表中取出数据,并根据数据显示记事本程序的大小和位置信息。以下是如何使用五个函数GetProfileInt、WriteProfileInt、GetProfileString、WriteProfileString、SetRegistryKey来保存要保存在注册表中的应用程序信息,以及如何从注册表中获取这些信息。下面是如何保存一些要保存在注册表中的信息。

 

注册表(Registry,繁体中文版Windows称之为登录档)是Microsoft Windows中的一个重要的数据库,用于存储系统和应用程序的设置信息。比如我们打开一个记事本,调整其窗口大小,使用完毕后关闭记事本,下次打开时大小和上次关闭前的大小和在屏幕上的位置是相同。这些位置和大小信息就是在记事本关闭时保存到注册表中,下次打开时我们从注册表中取出这些数据,并按照这些数据显示记事本程序的大小和位置信息。

下面教你如何使用GetProfileInt,WriteProfileInt,GetProfileString,WriteProfileString,SetRegistryKey这5个函数把你想要保存的应用程序信息保存到注册表中,如何从注册表中取出来。

UINT WINAPI GetProfileInt( LPCTSTR lpAppName,  LPCTSTR lpKeyName, int nDefault);

BOOL WriteProfileInt(LPCTSTR lpszSection, LPCTSTR lpszEntry, int nValue);

BOOL WINAPI WriteProfileString( LPCTSTR lpAppName, LPCTSTR lpKeyName, LPCTSTR lpString);

BOOL WriteProfileInt(LPCTSTR lpszSection,LPCTSTR lpszEntry,int nValue );

上面4个函数是CWinApp类中提供了一组用于读写应用程序配置的方法的接口,可方便的用于读写应用程序配置。具体的函数声明和参数解释可以参考MSDN。

下面就教你如何才能够把你想要保存的一些信息保存到注册表中。

1.    用VC++的向导建立基于对话框的MFC项目之后,在CClassApp::InitInstance()函数定义中添加这样的语句:

SetRegistryKey(_T("应用程序向导生成的本地应用程序"));

该函数将为以上提到的几个方法建立工作环境,此时如果用WriteProfileInt写入数据,将会被写入到如下注册表位置:

HKEY_CURRENT_USERSoftware应用程序向导生成的本地应用程序应用程序名称

你可以打开注册表查看一下是否有了对应的键值项。

如果在InitInstance中不执行SetRegistryKey,则用WriteProfileInt写入数据时,将写入到%windir%应用程序名称.ini中。

2.    向注册表中写入需要保存的数据

a.   如果在InitInstance中执行了SetRegistryKey("应用程序向导生成的本地应用程序");    则对于:

WriteProfileInt("section","val1",10);

将在注册表中如下路径写入数据:
[HKEY_CURRENT_USERSoftware应用程序向导生成的本地应用程序应用程序名称section]      "val1"=dword:0000000a

b.   如果在InitInstance中没执行SetRegistryKey 则对于:

WriteProfileInt("section","val1",10);

将在“%windir%测试应用程序.ini”中写入:
[section] 

val1=10

3.从注册表中读取需要的值

GetProfileInt("section","val1",10);

最后一个参数是默认值,如果没有从注册表中取得任何值,将使用这个默认的值。

对于取得字符串类型的值用法大致相同使用的是GetProfileString和WriteProfileString接口。

下面是一个测试例程,你可以放到工程中测试一下!

先在CTestClassApp::InitInstance()中添加SetRegistryKey函数

BOOL CTestClassApp::InitInstance()
{
    SetRegistryKey(_T("Test Regedit Solutions"));

    AfxEnableControlContainer();
    .............  //此处代码省略
    .............
    return FALSE;
}

可以在对话框的OK按钮的响应函数中添加下面的测试代码

void CTestClassDlg::OnOK() 
{    
    AfxGetApp()->WriteProfileInt("Settings", "Int", 21);
    AfxGetApp()->WriteProfileString("Settings", "String", _T("Welcome you come here!")); 

    int nGetInt = AfxGetApp()->GetProfileInt("Settings", "Int", 21);
    CString strGetString = AfxGetApp()->GetProfileString("Settings", "String", _T("Welcome you come here!")); 

    TCHAR szBuffer[256];
    wsprintf(szBuffer,_T("int:%d  string:%s"),nGetInt,strGetString);

    AfxMessageBox(szBuffer);
    //CDialog::OnOK();
}

运行程序点击OK按钮弹出对话框

VC++ MFC中如何将应用程序的配置信息保存到注册表中(一)第1张

取得的值和我们程序中写入的值相同。

让后在查找程序中输入regedit打开注册表,按上面的路径找到响应的位置,查看键值和对应的数据如下图所示

VC++ MFC中如何将应用程序的配置信息保存到注册表中(一)第2张

VC++ MFC中如何将应用程序的配置信息保存到注册表中(一)第3张

发现保存的值也是正确的。

有了这些我们就可以在注册表中保存我们需要保存的一些简单的程序配置信息数据了。

免责声明:文章转载自《VC++ MFC中如何将应用程序的配置信息保存到注册表中(一)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇安卓专利战:安卓侵犯了微软哪些专利?React Native Android原生模块开发实战|教程|心得|怎样创建React Native Android原生模块下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

MFC程序自动生成dump Windbg文件

  在客户机器上如何得到应该程序的详细出错信息, 这里使用drwtsn32,在应用程序崩溃的时候自动将调用栈的信息以文件形式保存在磁盘。   生成dump有drwtsn32, NTSD,CDB等多种工具,drwtsn32 于系统自带。   在项目中使用以下几个步骤: 1. 创建minidmp.h   minidmp.h #pragma once#inc...

java如何操作注册表(Preferences类)(在windows的注册表中保存、读取)

   我们经常需要将我们的程序运行中的一些信息(比如在选项对话框中的设置)记录下来,以做便再次运行的时候不用再重写填写这些数据。这对改善软件的人机可用性方面是很有用的。比如:数据库监控、日志工具,JDBMonitor在这方面做的是非常好的,以它的Swing界面监视器和数据库日志记录查询窗口中所有的配置信息(例如远程服务器地址、端口、数据库名称、JDBC驱动...

五种常见Windows服务无法启动问题的排错方法

在使用windows过程中经常遇到服务启动问题,判断起来比较麻烦,而且有些问题还无法通过查看微软知识库文章得到解决。所以这里进行一个简单的小结,帮助初学者解决常见的服务无法启动的问题 在微软新闻组里有很多网友咨询有关Windows服务无法启动的问题,例如无法启动“Logical Disk Manager”服务。这类服务出错的现象往往是五花八门,判断起来比较...

Windows注册表基础代码

Windows下对注册表进行操作使用的一段基础代码Reg.h: #pragmaonce#include<assert.h>#include<windows.h>classReg{HKEYhkey;public:voidopen(HKEYroot,char*subKey);//打开注册表键,不存在则创建voiddel(HKEYroot...

C++ MFC学习 (三)

视窗口覆盖在框架窗口之上 如果有了 OnDraw 不要再用OnPaint  OnPaint会覆盖掉OnDraw所画内容 1 // MFC_Demo1View.cpp : CMFC_Demo1View 类的实现 2 // 3 4 #include "stdafx.h" 5 // SHARED_HANDLERS 可以在实现预览、缩略图和搜...

MFC中的CString类

VC6.0中测试如下 #include "afx.h" //包含CString 类。需要设置 工程-》设置-》使用MFC 注:VS2013 可以直接包含 #include <atlstr.h> 就可以使用 CString 类 #include<iostream.h> int main() { CString csStr; c...