GetPrivateProfileString

【勇芳软件工作室】汉化HomePreviousNext

GetPrivateProfileString函数从初始化文件中的指定部分检索一个字符串。此函数用于与16位基于Windows的应用程序兼容。基于Win32的应用程序应该将初始化信息存储在注册表中。

DWORD GetPrivateProfileString(

LPCTSTR 【lpAppName】,//指向部分名称
LPCTSTR 【lpKeyName】,//指向键名
LPCTSTR 【lpDefault】,//指向默认字符串
LPTSTR 【lpReturnedString】,//指向目标缓冲区
DWORD 【服务提供商】,//目标缓冲区大小
LPCTSTR 【lpFileName】//指向初始化文件名
); 

参数

【lpAppName】

指向一个以null结尾的字符串,指定包含键名称的部分。如果此参数为NULL,则GetPrivateProfileString功能将文件中的所有段名称复制到提供的缓冲区。

【lpKeyName】

指向包含要检索其关联字符串的键名称的以null结尾的字符串。如果此参数为NULL,则由【lpAppName】参数指定的部分中的所有键名将复制到由【lpReturnedString】参数指定的缓冲区中。

【lpDefault】

指向以null结尾的默认字符串。如果在初始化文件中找不到【lpKeyName】键,GetPrivateProfileString将默认字符串复制到【lpReturnedString】缓冲区。此参数不能为NULL。

避免指定一个带有空白字符的默认字符串。该函数在【lpReturnedString】缓冲区中插入一个空字符,以剥离任何尾随的空白。

Windows 95:尽管【lpDefault】被声明为常量参数,但Windows 95通过在【lpDefault】字符串中插入一个空字符,然后将其复制到【lpReturnedString】缓冲区中,从而剥离任何尾随的空白。

Windows NT: Windows NT不会修改【lpDefault】字符串。这意味着如果默认字符串包含尾部空格,则使用LSTRCMP函数进行比较时,【lpReturnedString】【lpDefault】字符串将不匹配。

【lpReturnedString】

指向接收检索字符串的缓冲区的指针。

【服务提供商】

指定【lpReturnedString】参数指向的缓冲区的大小(以字符为单位)。

【lpFileName】

指向一个以空值终止的字符串的指针,用于命名初始化文件。如果此参数不包含文件的完整路径,Windows将在Windows目录中搜索该文件。

返回值

如果函数成功,则返回值是复制到缓冲区的字符数,不包括终止空字符。

如果【lpAppName】【lpKeyName】均为NULL,并且提供的目标缓冲区太小,无法容纳所请求的字符串,则字符串将被截断,后跟一个空字符,返回值等于【服务提供商】减1。

如果【lpAppName】【lpKeyName】为NULL,并且提供的目标缓冲区太小而不能容纳所有字符串,则最后一个字符串将被截断,后跟两个空字符。在这种情况下,返回值等于【服务提供商】减2。

备注

GetPrivateProfileString功能在指定的初始化文件中搜索与【lpAppName】参数指定的部分标题下的【lpKeyName】参数指定的名称相匹配的密钥。如果找到密钥,该函数将相应的字符串复制到缓冲区。如果该键不存在,该函数将复制由【lpDefault】参数指定的默认字符串。初始化文件中的一个部分必须具有以下形式:

[【section】]
【键】=【串】
.
.
.

如果【lpAppName】为NULL,则GetPrivateProfileString将指定文件中的所有段名复制到提供的缓冲区。如果【lpKeyName】为NULL,则该函数将指定部分中的所有键名复制到提供的缓冲区。应用程序可以使用此方法枚举文件中的所有部分和键。在任何一种情况下,每个字符串后跟一个空字符,最后一个字符串后跟一个第二个空字符。如果提供的目标缓冲区太小而不能容纳所有字符串,则最后一个字符串将被截断,后跟两个空字符。

如果与【lpKeyName】关联的字符串以单引号或双引号括起来,则当GetPrivateProfileString函数检索字符串时,标记将被丢弃。

GetPrivateProfileString功能不区分大小写;字符串可以是大写和小写字母的组合。

要从WIN.INI文件中检索一个字符串,请使用GetProfileString函数。

Windows NT:

对私有配置文件功能的调用可能会映射到注册表而不是指定的初始化文件。当在注册表中的以下键下指定初始化文件和部分时,会发生此映射:

HKEY_LOCAL_MACHINE\软件\微软\
Windows NT\CurrentVersion\IniFileMapping

如果应用程序修改系统组件初始化文件(如CONTROL.INI,SYSTEM.INI和WINFILE.INI),则可能会进行此映射。在这些情况下,GetPrivateProfileString函数从注册表中检索信息,而不是从初始化文件中检索;存储位置的变化对功能的行为没有影响。

Win32配置文件功能(Get/WriteProfile*Get/WritePrivateProfile*)使用以下步骤来定位初始化信息:

1.在注册表中的初始化文件的名称,说myfile.ini,在IniFileMapping下:

HKEY_LOCAL_MACHINE\软件\微软\
Windows NT\CurrentVersion\IniFileMapping\myfile.ini

2.查看【lpAppName】指定的部分名称。这将是myfile.ini下的命名值,或myfile.ini的子项,否则将不存在。

3.如果【lpAppName】指定的节名称是myfile.ini下的一个命名值,那么该值指定注册表中的哪个位置可以找到该节的键。

4.如果由【lpAppName】指定的部分名称是myfile.ini的子项,则该子项下的命名值将指定注册表中的哪个部分的键。如果您要查找的密钥不存在作为命名值,那么将会有一个未命名的值(显示为“< No Name >”),指定注册表中的默认位置,您将在其中找到密钥。

5.如果由【lpAppName】指定的部分名称不存在作为命名值或myfile.ini下的子项,那么在我的文件下将会有一个未命名的值(如“< No Name >”)) .ini,它指定注册表中的默认位置,您可以在其中找到该部分的键。

6.如果没有myfile.ini的子项,或者没有条目名称的条目,那么在磁盘上查找实际的myfile.ini并读取其内容。

当查看注册表中指定其他注册表位置的值时,有几个前缀可以更改ini文件映射的行为:

! - 这个字符强制所有的写入都到磁盘上的注册表和.INI文件。

# - 当新用户在安装后首次登录时,此字符会使注册表值设置为Windows 3.1 .INI文件中的值。

@ - 如果在注册表中找不到所请求的数据,则此字符可防止任何读取到磁盘上的.INI文件。

USR: - 此前缀代表HKEY_CURRENT_USER,前缀后面的文本与该键相关。

SYS: - 此前缀代表HKEY_LOCAL_MACHINE \\ SOFTWARE,前缀后的文本与该键相关。

也可以看看

GetProfileString, WritePrivateProfileString