利用API函数访问INI文件
冷山述 2000-11-07 15:50:39
一个完善的Windows应用程序都有其自己的INI初始化文件,专门用于存储系统的配置信息或状态信息。因此,许多编程者都希望在自己的应用程序中引入INI文件。
下面笔者通过示例说明,在VFP中如何在自己的应用程序中访问INI文件。
INI文件格式和相关API函数
首先介绍一下INI初始化文件的通用格式,在Windows中,初始化文件通用格式如下:
[application name]
Keyname=String
…
在WIN32的API函数集中,专用于访问INI初始化文件的接口函数有许多,笔者将详细介绍GetPrivateProfileString和WritePrivateProfileString两个函数:
DWORD GetPrivateProfileString(LPTSTR lpAppName,LPTSTR lpKeyName,
LPTSTR lpDefault,LPTSTR lpReturnedString,
DWORD dwSize,LPTSTR lpFileName)
该函数在指定的初始化文件(lpFileName)中查找一个关键字,该关键字与在lpAppName参数给出的应用程序标题下有lpKeyName参数指定的名称匹配。如果找到关键字,相应的字符串被拷贝到缓冲区中,如果关键字不存在,则将lpDefault参数指定的缺省字符串拷贝到缓冲区中。
BOOL WritePrivateProfileString(LPTSTR lpAppName,LPTSTR lpKeyName,
LPTSTR lpString,LPTSTR lpFileName)
该函数在指定的初始化文件(lpFileName)中查找参数lpAppName指定的应用程序标题,并在此标题下查找参数lpKeyName指定的键名,用lpString的值指定该键值;如果初始化文件中没有该标题或键,则函数将自动加入相应内容。
VFP中API函数的应用
首先需要对应用的API函数进行引用声明,通常放在程序的主文件中,声明如下:
DECLARE INTEGER GetPrivateProfileString IN Win32API AS GetPrivStr ;
String cSection, String cKey, String cDefault, String @cBuffer, ;
Integer nBufferSize, String cINIFile
DECLARE INTEGER WritePrivateProfileString IN Win32API AS WritePrivStr ;
String cSection, String cKey, String cValue, String cINIFile
引用声明之后,函数就可以以自定义的名称应用了:
WritePrivStr("Defaults", "Test","This is a test", CURDIR() + "TEST.INI")
LOCAL lcBuffer, ;
GetPrivStr("Defaults","Test", "", @lcBuffer, LEN(lcBuffer), CURDIR()+"Test.INI")
INI在VFP中的应用实例
下面是在对工具栏进行关闭操作时,用以记忆工具栏的停放位置,以用于下次打开工具栏时停放:
cToolbar.Destroy
LOCAL lcValue
IF this.Docked
lcValue = ALLT(STR(this.DockPosition))
ELSE
lcValue = ALLT(STR(thisform.Top)) + ‘,‘ + ;
ALLT(STR(thisform.Left))
ENDIF
WritePrivStr("WindowPositions", this.Caption, ;lcValue, CURDIR() + "TEST.INI")
以下代码是当打开工具栏时,自动读取上次关闭时的停放位置,并把工具栏停放到该位置上:
cToolbar.Init
IF GetPrivStr("WindowPositions", this.Caption, "", ;
@lcBuffer, LEN(lcBuffer), ;
CURDIR() +"TEST.INI") 〉 0
lnCommaPos = AT(",", lcBuffer)
IF lnCommaPos 〉 0
lnTop = VAL(LEFT(lcBuffer, lnCommaPos - 1))
lnLeft = VAL(SUBSTR(lcBuffer,lnCommaPos + 1))
ELSE
lnDockPosition = VAL(lcBuffer)
ENDIF
this.Top = lnTop
this.Left = lnLeft
this.Dock(lnDockPosition)
ENDIF
通过以上程序,我们就成功实现了在VFP应用程序中引入INI文件。
|