windows sdk API函数学习笔记整理--ini文件操作函数

本文介绍了C++中处理INI文件的方法,包括读取和写入整数、字符串及结构体数据,通过GetPrivateProfileInt等函数实现。还涵盖了枚举窗口函数中宏的含义。
(1)C++里边的_In_什么意思?如:
BOOL WINAPI EnumWindows(
_In_  WNDENUMPROC lpEnumFunc,
_In_  LPARAM lParam
);
答:这是一个宏,它的实际意义就是告诉你,这个变量或参数是输入值,即你必须给这个变量填写好以后提交给某个函数去执行。相对的还有_out_,意思是输出值,即你不需要预先给它值,当函数执行完毕以后可以从这个变量获取输出的数据。
这对宏并不参与编译和计算(空宏),但它对程序员(API使用者)起到了一个提示的作用。知道如何去使用它。



(2)GetPrivateProfileInt函数:
UINT WINAPI GetPrivateProfileInt(
  _In_  LPCTSTR lpAppName,// INI文件中的一个字段名
  _In_  LPCTSTR lpKeyName,// lpAppName 下的一个键名,也就是里面具体的变量名
  _In_  INT nDefault,//默认返回值,如果不能找到这个键值(如下,即找不到name)
  _In_  LPCTSTR lpFileName//完整的INI文件路径名
);

这个函数返回值是ini文件里,函数中药读的lpKeyName的键值,如果没有找到这个键值,则返回nDefault的值。
注:GetPrivateProfileInt函数不区分大小写,lpAppName和lpKeyName可以大小写组合。



例如,ini文件如下:
[class]
name=3


(3)GetPrivateProfileSection函数
DWORD WINAPI GetPrivateProfileSection(
  _In_   LPCTSTR lpAppName,//欲获取的小节(如[class])。注意这个字串不区分大小写 
  _Out_  LPTSTR lpReturnedString,//项和值字串的列表。每个字串都由一个NULL字符分隔,最后一个字串后面用两个NULL字符中止
  _In_   DWORD nSize,//缓冲区的大小。在windows系统中最大值为32767 
  _In_   LPCTSTR lpFileName//完整的INI文件路径名
);
获取指定小节所有项名和值的一个列表 
函数返回值指定字符数量装载到lpReturnedString缓冲区。如缓冲区的容量不够大,不能容下所有信息,返回值等于(nSize-2),同时返回一个整数,大小为取得字符串的长度,包括NULL字符,不包括最后的NULL字符



(4)GetPrivateProfileSectionNames函数 
DWORD WINAPI GetPrivateProfileSectionNames(
  _Out_  LPTSTR lpszReturnBuffer,//指定一个字符串的缓冲区,用于存放要读取的字段(即[class]中的class)
  _In_   DWORD nSize,//定义即缓冲区的大小,这个由lpszReturnBuffer指出,为它的大小(如sizeof(lpszReturnBuffer))。
  _In_   LPCTSTR lpFileName//完整的INI文件路径名
);
函数读取ini文件,从第一个开始中的字段名,存放指定数量(即nSize大小)的字符放入到内存中,只读取字段名(即[class]中的class);每个名字之间用一个0字符隔开,最后一个名字用两个0字符作为结尾。
返回值指定数量的字符复制到指定的缓冲,不包括终止null字符。如果缓冲区没有大到足以包含所有相关的部分名称指定的初始化文件,返回值等于返回值等于(nSize-2)。



(5)GetPrivateProfileString函数
DWORD WINAPI GetPrivateProfileString(
  _In_   LPCTSTR lpAppName,//欲在其中查找条目的小节名称,这个字串不区分大小写
  _In_   LPCTSTR lpKeyName,//欲获取的项名或条目名,这个字串不区分大小写
  _In_   LPCTSTR lpDefault,//指定的条目没有找到时返回的默认值,可设为空
  _Out_  LPTSTR lpReturnedString,//指定一个字串缓冲区,长度至少为nSize
  _In_   DWORD nSize,//指定装载到lpReturnedString缓冲区的最大字符数量
  _In_   LPCTSTR lpFileName//完整的INI文件路径名
);
函数GetPrivateProfileString从ini文件取得文字列;获得lpKeyName的值并给lpReturnedString。同时返回一个整数,大小为取得字符串的长度。
复制到lpReturnedString缓冲区的字节数量,其中不包括那些NULL 中止字符。如lpReturnedString缓冲区不够大,不能容下全部信息,就返回值(nSize-1),(若lpApplicationName或 lpKeyName为NULL,则返回(nSize-2))  


(6)GetPrivateProfileStruct函数
BOOL WINAPI GetPrivateProfileStruct(
  _In_   LPCTSTR lpszSection,//需要读出信息的小节名([class])
  _In_   LPCTSTR lpszKey,//小节中的键名
  _Out_  LPVOID lpStruct,// 要写入的数据缓冲区
  _In_   UINT uSizeStruct,//缓冲区的大小
  _In_   LPCTSTR szFile//ini文件名
);
从文件中读出指定键的 结构 值,函数成功,,返回非零值,不成功返回零值。


(7)GetProfileInt函数
UINT WINAPI GetProfileInt(
  _In_  LPCTSTR lpAppName,
  _In_  LPCTSTR lpKeyName,
  _In_  INT nDefault
);
从win.ini文件的小节中读一个键值(int型)。返回键值lpKeyName的值,如果没有键值或者是键值小于零,返回默认值nDefault。




(8)GetProfileSection函数
DWORD WINAPI GetProfileSection(
  _In_   LPCTSTR lpAppName,
  _Out_  LPTSTR lpReturnedString,
  _In_   DWORD nSize
);
读取win.ini中指定节lpAppName中所有键名及其值。lpReturnedString字符串形式如下:
Key1=Value1/0Key2=Value2/0…KeyN=ValueN/0/0。
装载到lpReturnedString缓冲区的字符数量。如缓冲区的长度不足以容下所有信息,则返回(nSize-2)


(9)GetProfileString 函数
DWORD WINAPI GetProfileString(
  _In_   LPCTSTR lpAppName,
  _In_   LPCTSTR lpKeyName,
  _In_   LPCTSTR lpDefault,
  _Out_  LPTSTR lpReturnedString,
  _In_   DWORD nSize
);
读取win.ini中指定节lpAppName中键名为lpKeyName对应变量的字符串值。
其中lpDefault是一个默认的字符串。如果lpKeyName键不存在或者无值,GetProfileString把默认字符串复制到lpReturnedString缓冲区。如果该参数为空,默认值是一个空字符串,"。


(10)WritePrivateProfileSection 函数
BOOL WINAPI WritePrivateProfileSection(
  _In_  LPCTSTR lpAppName,//指向包含 lpAppName名称的字符串地址
  _In_  LPCTSTR lpString,// 要写入的数据的地址
  _In_  LPCTSTR lpFileName// ini 文件的文件名
);


 将一个整个小节(如[class])的内容写入 ini 文件的指定小节中。替换INI文件中指定块中所有键名对应的值。

(11)WritePrivateProfileString 函数
BOOL WINAPI WritePrivateProfileString(
  _In_  LPCTSTR lpAppName,
  _In_  LPCTSTR lpKeyName,
  _In_  LPCTSTR lpString,//是键值,也就是变量的值,不过必须为LPCTSTR型或CString型的
  _In_  LPCTSTR lpFileName//完整的INI文件路径名
);
把给定的键名(lpString)及其值写入到指定INI文件的相应块中的键名lpKeyName的值


(12)WritePrivateProfileStruct函数
BOOL WINAPI WritePrivateProfileStruct(
  _In_  LPCTSTR lpszSection,//为ini文件的section名(即[class])
  _In_  LPCTSTR lpszKey,//配置文件的key名
  _In_  LPVOID lpStruct,//结构体对象的地址
  _In_  UINT uSizeStruct,//结构体的长度。
  _In_  LPCTSTR szFile//ini文件的路径名
);
把指定的键名及其数据写入到指定INI文件的块中。
你无法修改即将显示在界面的数据,它只能够显示上一次保存的数据。
当然这个对结构体也有要求,成员不能有指针,也就是CString啊,LPBYTE这些都不能使用,可以使用char数组或者TCHAR数组代替前面的。
现在读取ini文件数据了,使用GetPrivateProfileStruct函数。用法和写入是一样的。当然用之前得先创建一个结构体对象来存储读取出来的数据。





(13)WriteProfileSection 函数
BOOL WINAPI WriteProfileSection(
  _In_  LPCTSTR lpAppName, // 指向包含 Section 名称的字符串地址
  _In_  LPCTSTR lpString // 要写入的数据的地址
);
将一个整个 Section 的值 写入 Win.ini 文件的指定 Section 中
如果 Win.ini 没有指定的 Section,API 会新建立一个并写入数据,如果已经存在,则先删除原来 Seciton 中所有的 Key 值然后写入新的


(14)WriteProfileString 函数
BOOL WINAPI WriteProfileString(
  _In_  LPCTSTR lpAppName,// 指向包含 Section 名称的字符串地址
  _In_  LPCTSTR lpKeyName,// 指向包含 Key 名称的字符串地址
  _In_  LPCTSTR lpString // 要写的字符串地址
);
将一个 Key 值写入 Win.ini 文件的指定 Section 中
如果 Win.ini 没有指定的 Section,API 会新建 Section,如果没有指定的 Key 则新建一个 Key 并写入数据,如果已经存在,则用字符串代替原来的值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值