有时候,我们需要将初始化信息写入到配置文件中,当程序启动时从这个配置文件中读取这些初始化信息。现在,大部分软件都将这些信息写入到注册表中,然后在启动软件时,从注册表中读取这些初始化信息。但是早期的一些程序都是将这些信息写到Win.ini文件中。该文件位于系统安装根目录下的Windows目录下。
在程序中,如果想要向Win.ini文件写入一些初始化信息,可以使用WriteProfileString函数来实现。需要注意的是,Windows提供这个函数只是为了兼容16位版本的应用程序,基于Win32的程序应使用注册表来存储初始化信息。WriteProfileString函数原型如下:
BOOL WriteProfileString(
LPCTSTR lpAppName , // section name
LPCTSTR lpKeyName , // key name
LPCTSTR lpString // string to write
);
下面,我们建立一个空MFC工程File,在File程序中利用WriteProfileString函数将程序的初始化信息写入Win.ini文件,并将这个操作放置到CFileApp类的InitInstance函数中,在SetRegistryKey函数调用后添加代码。
在CWinApp类中也有WriteProfileString函数,那么它与Win32API中相应函数有什么区别呢?CWinApp类中WriteProfileString函数声明如下:
BOOL WriteProfileString( LPCTSTR lpszSection , LPCTSTR lpszEntry , LPCTSTR lpszValue );
可以看到CWinApp类中提供的WriteProfileString函数和Win32API提供的一致。然而使用结果却不一样,在我的机器上,调用CWinApp类的WriteProfileString函数之后,将把信息写到注册表中,而不是Win.ini文件中。
将上述代码中的第17行改成这样:(去掉 域名解析符::)
备注:在不同操作系统环境下,CWinApp类中提供的WriteProfil eString函数会把信息存储到不同的地方,或者写到Win.ini文件中,或者写入注册表中。例如:在Windows NT系统下,该函数把信息存储到注册表中;在Windows 3.X系统下,信息被写入Win.ini文件中。
本人所用测试环境:
在程序中,如果想要向Win.ini文件写入一些初始化信息,可以使用WriteProfileString函数来实现。需要注意的是,Windows提供这个函数只是为了兼容16位版本的应用程序,基于Win32的程序应使用注册表来存储初始化信息。WriteProfileString函数原型如下:
BOOL WriteProfileString(
LPCTSTR lpAppName , // section name
LPCTSTR lpKeyName , // key name
LPCTSTR lpString // string to write
);
下面,我们建立一个空MFC工程File,在File程序中利用WriteProfileString函数将程序的初始化信息写入Win.ini文件,并将这个操作放置到CFileApp类的InitInstance函数中,在SetRegistryKey函数调用后添加代码。
Code
1BOOL CFileApp::InitInstance()
2{
3 AfxEnableControlContainer();
4
5 // Standard initialization
6 // If you are not using these features and wish to reduce the size
7 // of your final executable, you should remove from the following
8 // the specific initialization routines you do not need.
9
10#ifdef _AFXDLL
11 Enable3dControls(); // Call this when using MFC in a shared DLL
12#else
13 Enable3dControlsStatic(); // Call this when linking to MFC statically
14#endif
15
16 SetRegistryKey(__T("Local AppWizard-Generated Applications"));
17 ::WriteProfileString("http://www.cnblogs.com", "admin", "lantionzy");
18
19
20 return TRUE;
21}
这段代码将向Win.ini文件写入一些信息,创建一个新的段,名称为:"http://www.cnblogs.com”,在其上创建一个新键,键名为:admin,值为:lantionzy。Build并运行程序,然后打开Win.ini文件,可以看到文件中新添加的段名、键名和其值。
1BOOL CFileApp::InitInstance()
2{
3 AfxEnableControlContainer();
4
5 // Standard initialization
6 // If you are not using these features and wish to reduce the size
7 // of your final executable, you should remove from the following
8 // the specific initialization routines you do not need.
9
10#ifdef _AFXDLL
11 Enable3dControls(); // Call this when using MFC in a shared DLL
12#else
13 Enable3dControlsStatic(); // Call this when linking to MFC statically
14#endif
15
16 SetRegistryKey(__T("Local AppWizard-Generated Applications"));
17 ::WriteProfileString("http://www.cnblogs.com", "admin", "lantionzy");
18
19
20 return TRUE;
21}
在CWinApp类中也有WriteProfileString函数,那么它与Win32API中相应函数有什么区别呢?CWinApp类中WriteProfileString函数声明如下:
BOOL WriteProfileString( LPCTSTR lpszSection , LPCTSTR lpszEntry , LPCTSTR lpszValue );
可以看到CWinApp类中提供的WriteProfileString函数和Win32API提供的一致。然而使用结果却不一样,在我的机器上,调用CWinApp类的WriteProfileString函数之后,将把信息写到注册表中,而不是Win.ini文件中。
将上述代码中的第17行改成这样:(去掉 域名解析符::)
WriteProfileString(
"
http://www.cnblogs.com
"
,
"
admin
"
,
"
lantionzy
"
);
运行File程序,然后打开注册表,将会看到我们刚刚写入的信息位于:HKEY_CURRENT_USER\Software\Local AppWizard-Generated
Applications\File子项下,而且该注册表项与File程序中写进的信息相同。
备注:在不同操作系统环境下,CWinApp类中提供的WriteProfil eString函数会把信息存储到不同的地方,或者写到Win.ini文件中,或者写入注册表中。例如:在Windows NT系统下,该函数把信息存储到注册表中;在Windows 3.X系统下,信息被写入Win.ini文件中。
本人所用测试环境:
Windows edition
Microsoft® Windows Server® 2008 Enterprise
6.0.6001 Service Pack 1 Build 6001
System
Processor: Intel(R) Pentium(R)Dual CPU E2180 @2.00GHz
Memory (RAM): 4.00GB
System type: 64-bit Operating System