WINDOWS API函数读写INI文件

合集下载

.NET读写INI文件

.NET读写INI文件

.NET读写INI⽂件.NET读写INI⽂件microblue 2005-4-5 03:52虽然微软早已经建议在WINDOWS中⽤注册表代替INI⽂件,但是在实际应⽤中,INI⽂件仍然有⽤武之地,尤其现在绿⾊软件的流⾏,越来越多的程序将⾃⼰的⼀些配置信息保存到了INI⽂件中。

 INI⽂件是⽂本⽂件,由若⼲节(section)组成,在每个带括号的标题下⾯,是若⼲个关键词(key)及其对应的值(Value) [Section] Key=ValueVC中提供了API函数进⾏INI⽂件的读写操作,但是微软推出的C#编程语⾔中却没有相应的⽅法,下⾯我介绍⼀个读写INI⽂件的C#类并利⽤该类保存窗体的坐标,当程序再次运⾏的时候,窗体将显⽰在上次退出时的位置。

INIFILE类:using System;using System.IO;using System.Runtime.InteropServices;因为我们需要调⽤API函数,所以必须创建System.Runtime.InteropServices命名空间以提供可⽤于访问 .NET 中的 COM 对象和本机 API 的类的集合。

using System.Text;namespace Ini{ publicclass IniFile { publicstring path; //INI⽂件名 [DllImport("kernel32")] privatestaticexternlong WritePrivateProfileString(string section,string key,string val,string filePath); [DllImport("kernel32")] privatestaticexternint GetPrivateProfileString(string section,string key,string def,StringBuilder retVal,int size,string filePath); //声明读写INI⽂件的API函数 public IniFile(string INIPath) { path = INIPath; } //类的构造函数,传递INI⽂件名 publicvoid IniWriteValue(string Section,string Key,string Value) { WritePrivateProfileString(Section,Key,Value,this.path); } //写INI⽂件 publicstring IniReadValue(string Section,string Key) { StringBuilder temp = new StringBuilder(255); int i = GetPrivateProfileString(Section,Key,"",temp,255,this.path); return temp.ToString(); } //读取INI⽂件指定 }调⽤INIFILE类:新建⼀个标准的C# WINDOWS应⽤程序项⽬,在窗体中分别增加命名为sect、key、val的三个⽂本框。

VB读写ini文件

VB读写ini文件

VB读写ini文件(1)2007-06-20 11:32自从注册表诞生以来ini文件正在逐渐失去其市场占有率,然而基于ini文件的独立性,致使其还没有到达退出历史舞台的地步,很多应用程序的初始化和一些界面参数的设置仍然很愿意从ini文件中读取,为了保证操作需用参数对ini文件的读取的通明性,建议使用一个模块来完成此工作。

注:所有操作调用标准的Win API函数来完成。

Dim Ret As LongDim Start As LongPublic FileName As StringConst BufSize = 10240Dim buf As String * BufSizePrivate Declare Function GetPrivateProfileInt Lib "kernel32" Alias "GetPrivateProfileIntA" (ByVal lpApplicationName As String, ByVal lpKeyName As String, ByVal nDefault As Long, ByVal lpFileName As String) As LongPrivate Declare Function GetPrivateProfileSection Lib "kernel32" Alias "GetPrivateProfileSectionA" (ByVal lpAppName As String, ByVal lpReturnedString As String, ByVal nSize As Long, ByVal lpFileName As String) As LongPrivate Declare Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpDefault As String, ByVal lpReturnedString As String, ByVal nSize As Long, ByVal lpFileName As String) As LongPrivate Declare Function WritePrivateProfileSection Lib "kernel32" Alias "WritePrivateProfileSectionA" (ByVal lpAppName As String, ByVal lpString As String, ByVal lpFileName As String) As LongPrivate Declare Function WritePrivateProfileString Lib "kernel32" Alias "WritePrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpString As Any, ByVal lpFileName As String) As LongPublic Sub SetValue(ByVal clsName As String, ByVal key As String, ByVal V As String) Ret = WritePrivateProfileString(clsName, key, V, FileName)End SubPublic Function GetValue(ByVal clsName As String, ByVal key As String) As String Ret = GetPrivateProfileString(clsName, key, "", buf, BufSize, FileName)Start = 1GetValue = RetStr()End FunctionPrivate Function RetStr() As StringDim i As Longi = InStr(Start, buf, Chr(0))If i > Start ThenRetStr = Mid(buf, Start, i - Start)End IfStart = i + 1End Function至此已经完成了对一个完整的独立模块的封装,接下来就来看看怎么引用(其实看完上面程序就明了了)VB读写INI文件(2)2007-06-20 11:32INI 文件是什么样子?——不会吧,这都不知道。

IniFile Ini操作

IniFile Ini操作

IniFile Ini操作分类:Delphi 2010-07-10 22:24 903人阅读评论(0) 收藏举报INI文件的结构如下[小节名]关键字=值uses IniFiles; {操作Ini文件需要引用TIniFile 的单元}常用的方法WriteString 写入字符串WriteInteger 写入数字WriteBool 写入布尔值ReadString 读取字符串值ReadInteger 读取数字ReadBool 读取布尔值ReadSections 读取小节列表ReadSection 读取某小节下关键字列表ReadSectionValues 读取某小节下所有内容列表,包括关键字和值写入view plaincopy to clipboardprint? .........10........20........30........40........50........60........70........80........90........100.......110.......120.......130.......140. (150)varF:TIniFile;beginF := TIniFile.Create('c:/A.ini'); //如果文件存在则打开,如果不存在,当向其中写入数据时,将创建ini文件F.WriteString('PersonInfo','姓名','张三');F.WriteInteger('PersonInfo','年龄',20);F.WriteBool('PersonInfo','婚否',False);end;varF:TIniFile;beginF := TIniFile.Create('c:/A.ini'); //如果文件存在则打开,如果不存在,当向其中写入数据时,将创建ini文件F.WriteString('PersonInfo','姓名','张三');F.WriteInteger('PersonInfo','年龄',20);F.WriteBool('PersonInfo','婚否',False);end;读取:读取方法的第三个参数表示,当读取失败时,返回的结果,view plaincopy to clipboardprint?varF:TIniFile;name:string;age:Integer;merry:Boolean;beginF := TIniFile.Create('c:/A.ini');name := F.ReadString('PersonInfo','姓名','无名氏'); //当读取失败时,返回'无名氏',否则返回读取的值age := F.ReadInteger('PersonInfo','年龄',20);merry := F.ReadBool('PersonInfo','婚否',False);end;varF:TIniFile;name:string;age:Integer;merry:Boolean;beginF := TIniFile.Create('c:/A.ini');name := F.ReadString('PersonInfo','姓名','无名氏'); //当读取失败时,返回'无名氏',否则返回读取的值age := F.ReadInteger('PersonInfo','年龄',20);merry := F.ReadBool('PersonInfo','婚否',False);end;读取小节的列表view plaincopy to clipboardprint?varF:TIniFile;List:TStringList;begintryList := TStringList.Create;F := TIniFile.Create('c:/A.ini');F.ReadSections(List); //将小节依次读取到List中ShowMessage(List.Text); //显示小节列表内容finallyList.Free;F.Free;end;end;varF:TIniFile;List:TStringList;begintryList := TStringList.Create;F := TIniFile.Create('c:/A.ini');F.ReadSections(List); //将小节依次读取到List中ShowMessage(List.Text); //显示小节列表内容finallyList.Free;F.Free;end;读取某小节下的关键字列表view plaincopy to clipboardprint?varF:TIniFile;List:TStringList;begintryList := TStringList.Create;F := TIniFile.Create('c:/A.ini');F.ReadSection('PersonInfo',List); //将小节依次读取到List中ShowMessage(List.Text); //显示'PersonInfo'小节下关键字列表内容finallyList.Free;F.Free;end;end;varF:TIniFile;List:TStringList;begintryList := TStringList.Create;F := TIniFile.Create('c:/A.ini');F.ReadSection('PersonInfo',List); //将小节依次读取到List中ShowMessage(List.Text); //显示'PersonInfo'小节下关键字列表内容finallyList.Free;F.Free;end;end;读取某小节下所有内容列表,包括关键字和值view plaincopy to clipboardprint?F:TIniFile;List:TStringList;begintryList := TStringList.Create;F := TIniFile.Create('c:/A.ini');F.ReadSectionValues('PersonInfo',List); //将小节依次读取到List中ShowMessage(List.Text); //读取某小节下所有内容列表,包括关键字和值finallyList.Free;F.Free;end;end;varF:TIniFile;List:TStringList;begintryList := TStringList.Create;F := TIniFile.Create('c:/A.ini');F.ReadSectionValues('PersonInfo',List); //将小节依次读取到List中ShowMessage(List.Text); //读取某小节下所有内容列表,包括关键字和值finallyList.Free;F.Free;end;end;其它常用方法EraseSection 删除某个小节DeleteKey 删除关键字SectionExists 判断某个章节是否存在ValueExists 判断某个小节下的某个关键字是否存在本文来自CSDN博客,转载请标明出处:/bdmh/archive/2009/05/04/4147104.aspx一、INI文件的结构:; 注释[小节名]关键字=值INI文件允许有多个小节,每个小节又允许有多个关键字,“=”后面是该关键字的值。

INI文件读写

INI文件读写

int CTestDlg::CalcCount(void)
{
TCHAR chSectionNames[2048]={0}; //所有节名组成的字符数组
char * pSectionName; //保存找到的某个节名字符串的首地址
int i; //i指向数组chSectionNames的某个位置,从0开始,顺序后移
LPCTSTR lpKeyName, // 键名,读取该键的值
LPCTSTR lpDefault, // 若指定的键不存在,该值作为读取的默认值
LPTSTR lpReturnedString, // 一个指向缓冲区的指针,接收读取的字符串
LPCTSTR lpAppName, // 节的名字,是一个以0结束的字符串
LPCTSTR lpKeyName, // 键的名字,是一个以0结束的字符串。若为NULL,则删除整个节
LPCTSTR lpString // 键的值,是一个以0结束的字符串。若为NULL,则删除对应的键
(1) 读取字符串
DWORD GetPrivateProfileString(
LPCTSTR lpAppName, // 同1(1)
ቤተ መጻሕፍቲ ባይዱLPCTSTR lpKeyName, // 同1(1)
LPCTSTR lpDefault, // 同1(1)
则可用以下语句读取age键的值:
int age;
age=::GetPrivateProfileInt("Test","age",0,".\\ex1.ini");
三、 删除键值或节
回顾一下WriteProfileString函数的说明

Windows API函数大全

Windows API函数大全

Windows API函数我们知道VB可以做很多事,但是有些事情,特别是涉及对Windows操作系统的访问,还需要借助Win32 API函数(Microsoft Win32 Application Programming Interface的缩写)。

API 函数是一组用C语言编写的函数,总共约有一千来个。

原本是为C语言编程人员而编写的,但也可以在VB应用程序中调用。

按功能划分,Win32 API函数大致涉及以下几个方面:窗口管理、图形设备接口、系统管理和多媒体技术。

Win32 API函数以动态链接库DLL提供给用户,可以在任何语言中调用。

DLL在程序运行时装入,随时响应程序的调用,不必在设计时就将文件存放在工程中,这就是动态链接的意思。

正因为如此,一个DLL程序可以同时为多个程序所调用。

在VB中引用API函数,需要事先通过Declare函数,声明要引用的DLL文件名称以及相应函数的参量。

然后便可像使用VB函数一样使用API函数。

我们看以下类似的声明语句:Declare Function GetComputerName Lib "kernel32" Alias "GetComputerNameA" (ByVal lpBuffer As String, nSize As Long) As LongGetComputerName是API函数名,kernel32是库名。

括号中的ByVal lpBuffer As String, nSize As Long就是函数的参量。

最后面的Long表示函数返回值的数据类型。

本节通过例子说明Win32 API函数的应用。

Windows在创建每个窗体时,都会赋给它一个与众不同的编号,这就是窗体的句柄。

在Windows中,窗体与控件都被看成是窗体(窗口)。

窗体的句柄保存在自己的hwnd属性中。

一.GetComputerName二、GetCursorPos三、GetWindowsDirectoryWindows API函数四、ClipCursor五、GetProfileInt六、GetProfileString七、PolygonWindows API函数八、SendMessagePublic Enum VBWin_MsgWM_NULL = &H0WM_CREATE = &H1WM_DESTROY = &H2WM_MOVE = &H3WM_SIZE = &H5WM_ACTIVATE = &H6WM_SETFOCUS = &H7WM_KILLFOCUS = &H8WM_ENABLE = &HAWM_SETREDRAW = &HBWM_SETTEXT = &HCWM_GETTEXTLENGTH = &HEWM_PAINT = &HFWM_CLOSE = &H10WM_QUERYENDSESSION = &H11WM_QUIT = &H12WM_QUERYOPEN = &H13WM_ERASEBKGND = &H14WM_SYSCOLORCHANGE = &H15WM_ENDSESSION = &H16WM_SHOWWINDOW = &H18WM_WININICHANGE = &H1AWM_DEVMODECHANGE = &H1BWM_ACTIVATEAPP = &H1CWM_FONTCHANGE = &H1DWM_TIMECHANGE = &H1EWM_CANCELMODE = &H1FWM_SETCURSOR = &H20WM_MOUSEACTIVATE = &H21WM_CHILDACTIVATE = &H22WM_QUEUESYNC = &H23WM_GETMINMAXINFO = &H24'begin_r_winuserWM_PAINTICON = &H26WM_ICONERASEBKGND = &H27WM_NEXTDLGCTL = &H28WM_SPOOLERSTATUS = &H2AWM_DRAWITEM = &H2BWM_MEASUREITEM = &H2CWM_DELETEITEM = &H2DWM_VKEYTOITEM = &H2EWM_CHARTOITEM = &H2FWM_SETFONT = &H30WM_GETFONT = &H31WM_SETHOTKEY = &H32WM_GETHOTKEY = &H33WM_QUERYDRAGICON = &H37WM_COMPAREITEM = &H39WM_COMPACTING = &H41WM_COMMNOTIFY = &H44 '/* no longer suported */WM_WINDOWPOSCHANGING = &H46WM_WINDOWPOSCHANGED = &H47WM_POWER = &H48WM_CANCELJOURNAL = &H4B'end_r_winuser'lParam of WM_COPYDATA message points to...'begin_r_winuser' '#if(WINVER > = 0x0400)WM_NOTIFY = &H4EWM_INPUTLANGCHANGEREQUEST = &H50WM_INPUTLANGCHANGE = &H51WM_TCARD = &H52WM_HELP = &H53WM_USERCHANGED = &H54WM_NOTIFYFORMAT = &H55WM_CONTEXTMENU = &H7BWM_STYLECHANGING = &H7CWM_STYLECHANGED = &H7DWM_DISPLAYCHANGE = &H7EWM_GETICON = &H7FWM_SETICON = &H80' '#endif /* WINVER > = 0x0400 */WM_NCCREATE = &H81WM_NCDESTROY = &H82WM_NCCALCSIZE = &H83WM_NCHITTEST = &H84WM_NCPAINT = &H85WM_NCACTIVATE = &H86WM_GETDLGCODE = &H87WM_SYNCPAINT = &H88WM_NCMOUSEMOVE = &HA0WM_NCLBUTTONDOWN = &HA1WM_NCLBUTTONUP = &HA2WM_NCLBUTTONDBLCLK = &HA3WM_NCRBUTTONDOWN = &HA4WM_NCRBUTTONUP = &HA5WM_NCRBUTTONDBLCLK = &HA6WM_NCMBUTTONDOWN = &HA7WM_NCMBUTTONUP = &HA8WM_NCMBUTTONDBLCLK = &HA9WM_KEYFIRST = &H100WM_KEYDOWN = &H100WM_KEYUP = &H101WM_CHAR = &H102WM_SYSKEYDOWN = &H104WM_SYSKEYUP = &H105WM_SYSCHAR = &H106WM_SYSDEADCHAR = &H107WM_KEYLAST = &H108' '#if(WINVER > = 0x0400)WM_IME_STARTCOMPOSITION = &H10DWM_IME_ENDCOMPOSITION = &H10EWM_IME_COMPOSITION = &H10FWM_IME_KEYLAST = &H10F' '#endif /* WINVER > = 0x0400 */WM_INITDIALOG = &H110WM_COMMAND = &H111WM_SYSCOMMAND = &H112WM_TIMER = &H113WM_HSCROLL = &H114WM_VSCROLL = &H115WM_INITMENU = &H116WM_INITMENUPOPUP = &H117WM_MENUSELECT = &H11FWM_MENUCHAR = &H120WM_ENTERIDLE = &H121'#if(WINVER > = 0x0500)WM_MENURBUTTONUP = &H122WM_MENUDRAG = &H123WM_MENUGETOBJECT = &H124WM_UNINITMENUPOPUP = &H125WM_MENUCOMMAND = &H126'#endif /* WINVER > = 0x0500 */WM_CTLCOLORMSGBOX = &H132WM_CTLCOLOREDIT = &H133WM_CTLCOLORLISTBOX = &H134WM_CTLCOLORBTN = &H135WM_CTLCOLORDLG = &H136WM_CTLCOLORSCROLLBAR = &H137WM_CTLCOLORSTATIC = &H138WM_MOUSEFIRST = &H200WM_LBUTTONDOWN = &H201WM_LBUTTONUP = &H202WM_LBUTTONDBLCLK = &H203WM_RBUTTONDOWN = &H204WM_RBUTTONUP = &H205WM_RBUTTONDBLCLK = &H206WM_MBUTTONDOWN = &H207WM_MBUTTONUP = &H208WM_MBUTTONDBLCLK = &H209'#if (_WIN32_WINNT > = 0x0400) || (_WIN32_WINDOWS > 0x0400) WM_MOUSEWHEEL = &H20AWM_MOUSELAST = &H20A'#Else' WM_MOUSELAST = &H209'#endif /* if (_WIN32_WINNT < 0x0400) */'#if(_WIN32_WINNT > = 0x0400)'#define WHEEL_DELTA 120 /* Value for rolling one detent */'#endif /* _WIN32_WINNT > = 0x0400 */'#if(_WIN32_WINNT > = 0x0400)'#define WHEEL_PAGESCROLL (UINT_MAX) /* Scroll on e page */'#endif /* _WIN32_WINNT > = 0x0400 */WM_PARENTNOTIFY = &H210WM_ENTERMENULOOP = &H211WM_EXITMENULOOP = &H212'#if(WINVER > = 0x0400)WM_NEXTMENU = &H213'// end_r_winuserWM_DEVICECHANGE = &H219'#endif /* WINVER > = 0x0400 */WM_MDICREATE = &H220WM_MDIDESTROY = &H221WM_MDIACTIVATE = &H222WM_MDIRESTORE = &H223WM_MDINEXT = &H224WM_MDIMAXIMIZE = &H225WM_MDITILE = &H226WM_MDICASCADE = &H227WM_MDIICONARRANGE = &H228WM_MDIGETACTIVE = &H229WM_MDISETMENU = &H230WM_ENTERSIZEMOVE = &H231WM_EXITSIZEMOVE = &H232WM_DROPFILES = &H233WM_MDIREFRESHMENU = &H234'#if(WINVER > = 0x0400)WM_IME_SETCONTEXT = &H281WM_IME_NOTIFY = &H282WM_IME_CONTROL = &H283WM_IME_COMPOSITIONFULL = &H284WM_IME_SELECT = &H285WM_IME_CHAR = &H286'#endif /* WINVER > = 0x0400 */'#if(WINVER > = 0x0500)WM_IME_REQUEST = &H288'#endif /* WINVER > = 0x0500 */'#if(WINVER > = 0x0400)WM_IME_KEYDOWN = &H290WM_IME_KEYUP = &H291'#endif /* WINVER > = 0x0400 */'#if(_WIN32_WINNT > = 0x0400)WM_MOUSEHOVER = &H2A1WM_MOUSELEAVE = &H2A3'#endif /* _WIN32_WINNT > = 0x0400 */WM_CUT = &H300WM_COPY = &H301WM_PASTE = &H302WM_CLEAR = &H303WM_UNDO = &H304WM_RENDERFORMAT = &H305WM_RENDERALLFORMATS = &H306WM_DESTROYCLIPBOARD = &H307WM_DRAWCLIPBOARD = &H308WM_PAINTCLIPBOARD = &H309WM_VSCROLLCLIPBOARD = &H30AWM_SIZECLIPBOARD = &H30BWM_ASKCBFORMATNAME = &H30CWM_CHANGECBCHAIN = &H30DWM_HSCROLLCLIPBOARD = &H30EWM_QUERYNEWPALETTE = &H30FWM_PALETTEISCHANGING = &H310WM_PALETTECHANGED = &H311WM_HOTKEY = &H312'#if(WINVER > = 0x0400)WM_PRINT = &H317WM_PRINTCLIENT = &H318WM_HANDHELDFIRST = &H358WM_HANDHELDLAST = &H35FWM_AFXFIRST = &H360WM_AFXLAST = &H37F'#endif /* WINVER > = 0x0400 */WM_PENWINFIRST = &H380WM_PENWINLAST = &H38FWM_USER = &H400Public Enum eWM_MsgWM_NULL = &H0WM_CREATE = &H1WM_DESTROY = &H2WM_MOVE = &H3WM_SIZE = &H5WM_ACTIVATE = &H6WM_SETFOCUS = &H7WM_KILLFOCUS = &H8WM_USER = &H400End Enum九、GlobalMemoryStatus十、GetSystemMenu十一、GetMenuItemInfo十二、SetMenuItemInfo十三、SetCursorPos十四、SetWindowPos十五、GetUserName。

读写INI文件的函数介绍

读写INI文件的函数介绍

读写INI文件函数的介绍INI文件就是扩展名为“ini”的文件。

在Windows系统中,INI文件是很多,最重要的就是“System.ini”、“System32.ini”和“Win.ini”。

该文件主要存放用户所做的选择以及系统的各种参数。

用户可以通过修改INI文件,来改变应用程序和系统的很多配置。

但自从Windows 95的退出,在Windows系统中引入了注册表的概念,INI文件在Windows系统的地位就开始不断下滑,这是因为注册表的独特优点,使应用程序和系统都把许多参数和初始化信息放进了注册表中。

但在某些场合,INI文件还拥有其不可替代的地位。

本文就来探讨一下C#是如何对INI进行读写操作。

INI文件的结构INI文件是一种按照特点方式排列的文本文件。

每一个INI文件构成都非常类似,由若干段落(section)组成,在每个带括号的标题下面,是若干个以单个单词开头的关键词(keyword)和一个等号,等号右边的就是关键字对应的值(value)。

其一般形式如下:[Section1]KeyWord1 = ValuelKeyWord2 = Value2……[Section2]KeyWord3 = Value3KeyWord4 = Value4C#和Win32 API函数C#并不像C++,拥有属于自己的类库。

C#使用的类库是.Net框架为所有.Net程序开发提供的一个共有的类库——.Net FrameWork SDK。

虽然.Net FrameWork SDK内容十分庞大,功能也非常强大,但还不能面面俱到,至少它并没有提供直接操作INI文件所需要的相关的类。

在本文中,C#操作INI文件使用的是Windows系统自带Win32的API函数——WritePrivateProfileString()和GetPrivateProfileString()函数。

这二个函数都位于“kernel32.dll”文件中。

WindowsAPI函数大全(完整)

WindowsAPI函数大全(完整)

WindowsAPI函数⼤全(完整)Windows API函数⼤全,从事软件开发的朋友可以参考下1. API之⽹络函数WNetAddConnection 创建同⼀个⽹络资源的永久性连接WNetAddConnection2 创建同⼀个⽹络资源的连接WNetAddConnection3 创建同⼀个⽹络资源的连接WNetCancelConnection 结束⼀个⽹络连接WNetCancelConnection2 结束⼀个⽹络连接WNetCloseEnum 结束⼀次枚举操作WNetConnectionDialog 启动⼀个标准对话框,以便建⽴同⽹络资源的连接WNetDisconnectDialog 启动⼀个标准对话框,以便断开同⽹络资源的连接WNetEnumResource 枚举⽹络资源WNetGetConnection 获取本地或已连接的⼀个资源的⽹络名称WNetGetLastError 获取⽹络错误的扩展错误信息WNetGetUniversalName 获取⽹络中⼀个⽂件的远程名称以及/或者UNC(统⼀命名规范)名称WNetGetUser 获取⼀个⽹络资源⽤以连接的名字WNetOpenEnum 启动对⽹络资源进⾏枚举的过程2. API之消息函数BroadcastSystemMessage 将⼀条系统消息⼴播给系统中所有的顶级窗⼝GetMessagePos 取得消息队列中上⼀条消息处理完毕时的⿏标指针屏幕位置GetMessageTime 取得消息队列中上⼀条消息处理完毕时的时间PostMessage 将⼀条消息投递到指定窗⼝的消息队列PostThreadMessage 将⼀条消息投递给应⽤程序RegisterWindowMessage 获取分配给⼀个字串标识符的消息编号ReplyMessage 答复⼀个消息SendMessage 调⽤⼀个窗⼝的窗⼝函数,将⼀条消息发给那个窗⼝SendMessageCallback 将⼀条消息发给窗⼝SendMessageTimeout 向窗⼝发送⼀条消息SendNotifyMessage 向窗⼝发送⼀条消息3. API之⽂件处理函数CloseHandle 关闭⼀个内核对象。

使用API函数对配置文件读写

使用API函数对配置文件读写

使用API函数对配置文件读写c#代码001 using System;002 using System.Collections.Generic;003 using System.T ext;004 using System.IO;005 using System.Runtime.InteropServices;006007 namespace NameSpace008 {009 ///010 /// 利用Windows API 读写INI 文件011 /// 写入时,如果没有INI 文件,自动创建INI012 /// 如果在创建时,GetLastError:5 检查IniPath 是否添加了文件名称.ini013 ///014 public class INI015 {016 //声明kernel32.dll 函数017[DllImport("kernel32")] 018private static extern long WritePrivateProfileString(string section,string key, string val, string filePath); 019[DllImport("kernel32")] 020 private static extern int GetPrivateProfileString(string s ection,string key, string def, StringBuilder retVal, int size, string filePath);021 //022 [DllImport("kernel32")]023 public static extern uint GetLastError();024025 string IniPath = null;026027 ///028 /// 构造方法029 ///030 /// INI 文件的绝对路径,后面不需要斜杠031 /// INI 文件名称使用时不需要斜杠,需要.ini032 public INI(string INIPath,string INIFileName)033 {034 Console.WriteLine("INI Object building");035 IniPath = INIPath + "\\" + INIFileName;036 Console.WriteLine("INIFilePath :" + IniPath); 037 }038039040 ///041 /// 写入INI 文件042 ///043 /// Section044 /// Key045 /// Value046 public void IniWriteValue(string Section, string Key, stri ng Value)047 {048 Console.WriteLine("---IniWriteValue---");049 Console.WriteLine("Section :" + Section);050 Console.WriteLine("Key :" + Key);051 Console.WriteLine("Value :" + Value);052 Console.WriteLine("IniPath :" + IniPath);053 UInt32 Snapshot = GetLastError();055 WritePrivateProfileString(Section, Key, Value,IniPath);056 if (Snapshot != GetLastError())057 {058 Console.WriteLine("GetLastError :" +GetLastError());059 }060 }061062 ///063 /// 读出INI 文件064 ///065 /// Section066 /// Key067 public string IniReadValue(string Section, string Key) 068 {069 StringBuilder result = new StringBuilder(256); 070 GetPrivateProfileString(Section, Key, null, result,256, IniPath);071 return result.T oString();072 }073074 public bool ExistINIFile()075 {076 return File.Exists(IniPath);077 }078079 ///080 /// creat config file to application ini082 ///083 public void CreateConfig(string IP)084 {085 Console.WriteLine("CreateConfig");086 Console.WriteLine("IP:" + IP);087 try088 {089 WriteConfigIP(IP);090091 if (ExistINIFile())092 {093 Console.WriteLine("配置文件创建成功"); 094 }095 else096 {097 Console.WriteLine("配置文件创建不成功"); 098 }099 }100 catch (Exception err)101 {102 Console.WriteLine("出错信息:" + err.ToString()); 103 } 104 }105106 ///107 /// write config for ip information108 ///109 ///110 public void WriteConfigIP(string IP)111 {112 string Section = "Config";113 string Key = "IP";114 string Value = IP;115 try116 {117 IniWriteValue(Section, Key, Value);118 }119 catch (Exception err)120 {121 Console.WriteLine("出错信息:" + err.ToString()); 122 }123 }124125 public string ReadConfigIP()126 {127 try128 {129 string Section = "Config";130 string result = IniReadValue(Section, "IP");131 Console.WriteLine("ReadConfigIP Result :" + result);132 return result;133 }134 catch (Exception err)135 {136 Console.WriteLine("出错信息:" + err.T oString()); 137 return "Read Error";138 }139 }140141 }142 }。

读取INI配置文件GetProfileString和GetPrivateProfileSt。。。

读取INI配置文件GetProfileString和GetPrivateProfileSt。。。

读取INI配置⽂件GetProfileString和GetPrivateProfileSt。

winapi函数介绍VB声明Declare Function GetPrivateProfileString& Lib "kernel32" Alias "GetPrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As String, ByVal lpDefault As String, ByVal lpReturnedString As String, ByVal nSize As Long, ByVal lpFileName As String)说明为初始化⽂件中指定的条⽬取得字串返回值Long,复制到lpReturnedString缓冲区的字节数量,其中不包括那些NULL中⽌字符。

如lpReturnedString缓冲区不够⼤,不能容下全部信息,就返回nSize-1(若lpApplicationName或lpKeyName为NULL,则返回nSize-2)参数表参数类型及说明lpApplicationName String,欲在其中查找条⽬的⼩节名称。

这个字串不区分⼤⼩写。

如设为vbNullString,就在lpReturnedString缓冲区内装载这个ini⽂件所有⼩节的列表lpKeyName String,欲获取的项名或条⽬名。

这个字串不区分⼤⼩写。

如设为vbNullString,就在lpReturnedString 缓冲区内装载指定⼩节所有项的列表lpDefault String,指定的条⽬没有找到时返回的默认值。

可设为空("")lpReturnedString String,指定⼀个字串缓冲区,长度⾄少为nSizenSize Long,指定装载到lpReturnedString缓冲区的最⼤字符数量lpFileName String,初始化⽂件的名字。

getprivateprofilestring 编码

getprivateprofilestring 编码

getprivateprofilestring 编码
GetPrivateProfileString 是一个Windows API 函数,用于从指定的应用程序的 INI 文件中读取字符串。

它不直接涉及编码问题,因为 INI 文件通常使用简单的文本格式,不涉及复杂的编码机制。

然而,如果你在处理包含非ASCII字符(如中文、日文、阿拉伯文等)的 INI 文件时遇到编码问题,那么你可能需要确保你的应用程序或代码正确地处理这些字符。

以下是几个可能的编码相关的问题和解决方案:
文件编码:确保 INI 文件的编码与你的代码或应用程序期望的编码相匹配。

常见的编码格式包括UTF-8 和ANSI。

API 使用:如果 INI 文件包含非ASCII字符,你可能需要确保在调用GetPrivateProfileString 时正确处理这些字符。

例如,你可能需要使用宽字符版本的API (如GetPrivateProfileStringW),并确保传递正确的字符集。

代码设置:如果你的代码或应用程序是在不同的语言或环境中编写的,确保你的开发环境支持所需的字符集。

例如,如果你的代码是用 C++ 编写的,你可能需要设置正确的编译选项来支持 Unicode。

平台差异:不同的操作系统和区域设置可能有不同的默认字符集。

确保你的应用程序或代码能够适当地处理这些差异。

总之,虽然GetPrivateProfileString 本身不直接涉及编码问题,但在处理包含非ASCII字符的 INI 文件时,你可能需要关注文件的编码、API 的使用以及开发环境的设置。

WINDOWS API函数读写INI文件

WINDOWS API函数读写INI文件

在VB6中用WINDOWS API函数读写INI文件INI文件在Windows3.2的时代扮演着极其重要的角色,主要用于保存软件参数的设置。

但到了Windows95/98的年代,微软推出了注册表,一般要求软件将所有的参数设置全保存到注册表中去。

这样一来,当用户安装的软件越来越多的时候,就会导致注册表越来越庞大,从而令到系统运行速度变慢,稳定性变差。

所以,在某些情况下,如:软件需要保存的数据不多或要制作“绿色软件”时,我们仍然经常用到INI文件。

《家用电脑》自1999年以来已经有不少文章介绍过在编程时如何读写INI文件的方法,但多是基于C++或Delphi的,对于目前最为流行的编程语言之一的Visual Basic却没有提及。

现笔者根据自己的使用经验,将VB中读写INI文件的方法总结出来,以和各位“大虾”共同探讨一下。

方法当然也是利用Windows本身提供的API函数。

对INI文件的读写操作,Windows 提供了如下几个常用的 API函数:GetPrivateProfileInt()、GetPrivateProfileSection()、GetPrivateProfileString()、WritePrivateProfileSection()、WritePrivateProfileString()。

由于在《家用电脑》1999年第21期的《利用Windows API函数在Delphi中对INI文件读写》(以下简称《利》文)中已经对上述5个函数作了详细的介绍。

虽然《利》文介绍的方法是在Delphi中实现的,但除了声明方式外,函数的功能和参数的含义是相同的,所以,笔者就不再详述了,在此仅给出它们在VB中的声明方式及作用:Public Declare Function GetPrivateProfileInt Lib ″kernel32″Alias ″GetPrivateProfileIntA″ (ByVal lpApplicationName As String,ByVal lpKeyName As String, ByVal nDefault As Long, ByVal lpFileName AsString) As Long。

WINCE下ini文件的读取

WINCE下ini文件的读取

WINCE下ini文件的读取#include "StdAfx.h"#include "CEIniFile.h"/////////////////////////////////////////////////////////////////////////////////////////// 说明////// 1. 如果下列函数执行时返回错误,用GetLastError()得到错误信息// 2. 读和写都按标准的Ini文件格式// 3. 在CATCH{}宏里可以得到异常信息#define MAX_LEN 1000 ///用于CString,使用CString类前最好估算整个操作过程中可能出现的最大///字符长度,用GetBuffer(MAX_LEN)来创建缓冲区。

这将避免频繁创建、删除///缓冲区,提高了效率,也避免了内存碎片。

CCeIniFile::CCeIniFile(): m_csIniFileName(_T("")), m_csKeyWord(_T("")){}CCeIniFile::CCeIniFile(CString csIniFileName){m_csIniFileName = csIniFileName;}CCeIniFile::~CCeIniFile(){}void CCeIniFile::IntoKey(CString csKeyWord){m_csKeyWord = csKeyWord;}int CCeIniFile::GetSectionValue(CString csSectionName){int nCount= GetProfileInt(m_csKeyWord.GetBuffer(0),csSectionName.GetBuffer(0),0);return nCount;}BOOL CCeIniFile::SetSectionValue(CString csSectionName,LPCTSTR csSectionValue){BOOL bRect = WriteProfileString(m_csKeyWord.GetBuffer(0),csSectionName.GetBuffer(0),csSectionValue);return bRect;}CString CCeIniFile::GetSectionValueS(CString csSectionName){CString strSect;strSect = GetProfileString(m_csKeyWord.GetBuffer(0),csSectionName.GetBuffer(0),_T("默认"));return strSect;}BOOL CCeIniFile::WriteProfileString(const CString strSection, const CString strEntry, const CString strValue){////先判断所有参数是否为空if(strSection == L"" || strEntry == L"" || strValue == L""){return FALSE;}CFile IniFile;CString strCombine;TRY{////打开文件if(! IniFile.Open(m_csIniFileName, CFile::modeReadWrite|CFile::modeCreate|CFile::modeNoTruncate)){return FALSE;}///判断文件是否为空,为空则直接写数据,就不必先把文件内容读出来。

getprivateprofilestring参数介绍

getprivateprofilestring参数介绍

getprivateprofilestring参数介绍GetPrivateProfileString是Windows API中的一个函数,它用于从一个INI文件中读取一个已有的字符串。

这个函数通常用于在Windows应用程序中读取INI配置文件中的设置,如数据库连接配置、窗口位置大小等。

在本文中,我们将介绍GetPrivateProfileString API函数的各个参数及其用途。

函数定义:```c++ DWORD WINAPIGetPrivateProfileString( LPCSTR lpAppName, LPCSTR lpKeyName, LPCSTR lpDefault, LPSTR lpReturnedString, DWORD nSize, LPCSTR lpFileName ); ```参数列表:1. lpAppName:ini文件中的一个节点名。

节点名可以视为一个配置组,如[database]或[window]。

2. lpKeyName:节点下的键名称。

键名即为配置的名称,如“server”或“port”。

3. lpDefault:如果无法找到键或键值为空,则返回该默认值。

如果默认值为空,则函数将返回一个空字符串。

4. lpReturnedString:返回值的缓冲区数组。

该缓冲区必须足够大,以便在返回的字符串中容纳nSize所指定的最大字符数。

如果该缓冲区太小,则函数返回一个空字符串。

5. nSize:返回字符串缓冲区的大小,以字节为单位。

如果该缓冲区太小,则返回一个空字符串。

如果该缓冲区足够大,则返回的字符串长度包括字符串的终止符。

6. lpFileName:INI文件的完整路径和名称。

下面我们将详细介绍每个参数:lpAppName参数:lpAppName是一个INI文件中的一个节点名。

节点名可以视为一个配置组,用[ ]括起来,如[database]或[window]。

C#读写ini文件的类,调用kernel32.dll中的api

C#读写ini文件的类,调用kernel32.dll中的api

using System.Runtime.InteropServices;using System.Text;namespace INIFile{/// <summary>/// 读写ini文件的类/// 调用kernel32.dll中的两个api:WritePrivateProfileString,GetPriva teProfileString来实现对ini 文件的读写。

////// INI文件是文本文件,/// 由若干节(section)组成,/// 在每个带括号的标题下面,/// 是若干个关键词(key)及其对应的值(value)//////[Section]///Key=value////// </summary>public class IniFile{/// <summary>/// ini文件名称(带路径)/// </summary>public string filePath;//声明读写INI文件的API函数[DllImport("kernel32")]private static extern long WritePrivateProfileString(string section, string key,string val,string filePath);[dllimport("kernel32")]private static extern int GetPrivateProfileString(string section,stri ng key,string def,StringBuilder retVal,int size,string filePath);/// <summary>/// 类的构造函数/// </summary>/// <param name="INIPath">INI文件名</param>public IniFile(string INIPath){filePath = INIPath;}/// <summary>/// 写INI文件/// </summary>/// <param name="Section">Section</param>/// <param name="Key">Key</param>/// <param name="value">value</param>public void WriteInivalue(string Section,string Key,string valu e){WritePrivateProfileString(Section,Key,value,this.filePath);}/// <summary>/// 读取INI文件指定部分/// </summary>/// <param name="Section">Section</param>/// <param name="Key">Key</param>/// <returns>String</returns>public string ReadInivalue(string Section,string Key){StringBuilder temp = new StringBuilder(255);int i = GetPrivateProfileString(Section,Key,"",temp,255,this.filePat h);return temp.ToString();} } }。

如何在C#中读写INI文件

如何在C#中读写INI文件

如何在C#中读写INI文件INI文件就是扩展名为 ini 的文件在Windows系统中 INI文件是很多最重要的就是 System ini System ini 和 Win ini 该文件主要存放用户所做的选择以及系统的各种参数用户可以通过修改INI文件来改变应用程序和系统的很多配置但自从Windows 的退出在Windows 系统中引入了注册表的概念 INI文件在Windows系统的地位就开始不断下滑这是因为注册表的独特优点使应用程序和系统都把许多参数和初始化信息放进了注册表中但在某些场合INI文件还拥有其不可替代的地位本文就来探讨一下C#是如何对INI进行读写操作INI文件的结构INI文件是一种按照特点方式排列的文本文件每一个INI文件构成都非常类似由若干段落(section)组成在每个带括号的标题下面是若干个以单个单词开头的关键词(keyword)和一个等号等号右边的就是关键字对应的值(value)其一般形式如下[Section ] KeyWord = Valuel KeyWord = Value …… [Section ] KeyWord = Value KeyWord = ValueC#和Win API函数C#并不像C++拥有属于自己的类库C#使用的类库是 Net框架为所有 Net程序开发提供的一个共有的类库—— Net FrameWork SDK 虽然 Net FrameWork SDK内容十分庞大功能也非常强大但还不能面面俱到至少它并没有提供直接操作INI文件所需要的相关的类在本文中C#操作INI文件使用的是Windows系统自带Win 的API函数——WritePrivateProfileString()和GetPrivateProfileString()函数这二个函数都位于kernel dll 文件中我们知道在C#中使用的类库都是托管代码(Managed Code)文件而Win 的API函数所处的文件都是非托管代码(Unmanaged Code)文件这就导致了在C#中不可能直接使用这些非托管代码文件中的函数好在 Net框架为了保持对下的兼容也为了充分利用以前的资源提出了互操作通过互操作可以实现对Win 的API函数的调用互操作不仅适用于Win 的API函数还可以用来访问托管的对象C#中对Win 的API函数的互操作是通过命名空间System RuntimeInteropServices 中的DllImport 特征类来实现的它的主要作用是指示此属性化方法是作为非托管DLL的输出实现的下面代码就是在C#利用命名空间 System Runtime InteropServices 中的 DllImport 特征类申明上面二个Win 的API函数C#申明INI文件的写操作函数WritePrivateProfileString() [ DllImport ( kernel ) ] private static extern long WritePrivateProfileString ( string section string key string val string filePath ) ; 参数说明 section INI文件中的段落 key INI文件中的关键字 val INI文件中关键字的数值 filePath INI文件的完整的路径和名称C#申明INI文件的读操作函数GetPrivateProfileString() [ DllImport ( kernel ) ] private static extern int GetPrivateProfileString ( string section string key string def StringBuilder retVal int size string filePath ) ; 参数说明 section INI文件中的段落名称 key INI文件中的关键字 def 无法读取时候时候的缺省数值 retVal 读取数值 size 数值的大小 filePath INI文件的完整路径和名称下面是一个读写INI文件的类public class INIClass { public string inipath; [DllImport( kernel )] private static extern long WritePrivateProfileString(string section string key string val string filePath); [DllImport( kernel )] private static extern int GetPrivateProfileString(string section string key string def StringBuilder retVal int size string filePath); ////// 构造方法 /// ///文件路径public INIClass(string INIPath) { inipath = INIPath; } /// /// 写入INI文件 /// ///项目名称(如 [TypeName] )///键///值public void IniWriteValue(string Section string Key string Value) { WritePrivateProfileString(Section Key Value this inipath); } /// /// 读出INI文件 /// ///项目名称(如 [TypeName] )///键public string IniReadValue(string Section string Key) { StringBuilder temp = new StringBuilder( ); int i = GetPrivateProfileString(Section Key temp this inipath); return temp ToString(); } /// /// 验证文件是否存在/// /// 布尔值public bool ExistINIFile() { return File Exists(inipath); } }C#对INI文件进行写操作对INI文件进行写操作是通过组件button 的Click 事件来实现的这里有一点应该注意当在调用WritePrivateProfileString()对INI文件进行写操作的时候如果此时在INI文件中存在和要写入的信息相同的段落名称和关键字则将覆蓋此INI信息下面是button 组件的 Click 事件对应的代码清单private void button _Click ( object sender System EventArgs e ){string FileName = textBox Text ;string section = textBox Text ;string key = textBox Text ;string keyValue = textBox Text ;WritePrivateProfileString ( section key keyValue FileName ) ;MessageBox Show ( 成功写入INI文件!信息 ) ;}C#对INI文件进行读操作正确读取INI的必须满足三个前提INI文件的全路径段落名称和关键字名称否则就无法正确读取你可以设定读取不成功后的缺省数值在下面的程序中为了直观设定的是无法读取对应数值!字符串读取INI文件是通过button 组件的 Click 事件来实现的下面是其对应的代码清单private void button _Click ( object sender System EventArgs e ){StringBuilder temp = new StringBuilder ( ) ;string FileName = textBox Text ;string section = textBox Text ;string key = textBox Text ;int i = GetPrivateProfileString ( section key 无法读取对应数值!temp FileName ) ;//显示读取的数值textBox Text = temp ToString ( ) ;}using System ;using System Drawing ;using System Collections ;using System ComponentModel ;using System Windows Forms ;using System Data ;using System Runtime InteropServices ;using System Text ;namespace C_操作INI文件__写操作{public class Form : System Windows Forms Form{private System Windows Forms Button button ;private System Windows Forms TextBox textBox ;private System Windows Forms Button button ;private System Windows Forms TextBox textBox ;private System Windows Forms TextBox textBox ;private System Windows Forms TextBox textBox ;private System Windows Forms Label label ;private System Windows Forms Label label ;private System Windows Forms Label label ;private System Windows Forms Button button ;private System Windows Forms OpenFileDialog openFileDialog ;private System ComponentModel Container ponents = null ;public Form ( ){InitializeComponent ( ) ;}protected override void Dispose ( bool disposing ){if ( disposing ){if ( ponents != null ){ponents Dispose ( ) ;}}base Dispose ( disposing ) ;}[ DllImport ( kernel ) ]private static extern long WritePrivateProfileString ( string sectionstring key string val string filePath ) ;[ DllImport ( kernel ) ]private static extern int GetPrivateProfileString ( stringsectionstring key string def StringBuilder retValint size string filePath ) ;private void InitializeComponent ( ){this button = new System Windows Forms Button ( ) ;this textBox = new System Windows Forms TextBox ( ) ;this button = new System Windows Forms Button ( ) ;this textBox = new System Windows Forms TextBox ( ) ;this textBox = new System Windows Forms TextBox ( ) ;this textBox = new System Windows Forms TextBox ( ) ;this label = new System Windows Forms Label ( ) ;this label = new System Windows Forms Label ( ) ;this label = new System Windows Forms Label ( ) ;this button = new System Windows Forms Button ( ) ;this openFileDialog = newSystem Windows Forms OpenFileDialog ( ) ;this SuspendLayout ( ) ;this button FlatStyle = System Windows Forms FlatStyle Flat ;this button Location = new System Drawing Point ( ) ;this button Name = button ;this button Size = new System Drawing Size ( ) ;this button TabIndex = ;this button Text = 选择INI文件 ;this button Click += new System EventHandler ( this button _Click ) ;this textBox Location = new System Drawing Point ( ) ;this textBox Name = textBox ;this textBox Size = new System Drawing Size ( ) ;this textBox TabIndex = ;this textBox Text = ;this button FlatStyle = System Windows Forms FlatStyle Flat ;this button Location = new System Drawing Point ( ) ;this button Name = button ;this button Size = new System Drawing Size ( ) ;this button TabIndex = ;this button Text = 写入INI文件 ;this button Click += new System EventHandler ( this button _Click ) ;this textBox Location = new System Drawing Point ( ) ;this textBox Name = textBox ;this textBox Size = new System Drawing Size ( ) ;this textBox TabIndex = ;this textBox Text = ;this textBox Location = new System Drawing Point ( ) ;this textBox Name = textBox ;this textBox Size = new System Drawing Size ( ) ;this textBox TabIndex = ;this textBox Text = ;this textBox Location = new System Drawing Point ( ) ;this textBox Name = textBox ;this textBox Size = new System Drawing Size ( ) ;this textBox TabIndex = ;this textBox Text = ;this label Location = new System Drawing Point ( ) ;this label Name = label ;this label TabIndex = ;this label Text = 段落名称 ;this label Location = new System Drawing Point ( ) ;this label Name = label ;this label TabIndex = ;this label Text = 关键字 ;this label Location = new System Drawing Point ( ) ;this label Name = label ;this label TabIndex = ;this label Text = 关键字数值 ;this button FlatStyle = System Windows Forms FlatStyle Flat ;this button Location = new System Drawing Point ( ) ;this button Name = button ;this button Size = new System Drawing Size ( ) ;this button TabIndex = ;this button Text = 读取INI数值 ;this button Click += new System EventHandler ( this button _Click ) ;this openFileDialog Filter = INI 文件|* ini ;this AutoScaleBaseSize = new System Drawing Size ( ) ;this ClientSize = new System Drawing Size ( ) ;this Controls AddRange ( new System Windows Forms Control [ ] {this buttonthis textBoxthis textBoxthis textBoxthis buttonthis textBoxthis buttonthis labelthis labelthis label } ) ;this MaximizeBox = false ;this Name = Form ;this Text = C#操作INI文件写操作 ;this ResumeLayout ( false ) ;}[STAThread]static void Main ( ){Application Run ( new Form ( ) ) ;}private void button _Click ( object sender System EventArgs e ){openFileDialog ShowDialog ( ) ;textBox Text = openFileDialog FileName ;}//写入INI文件private void button _Click ( object sender System EventArgs e ){string FileName = textBox Text ;string section = textBox Text ;string key = textBox Text ;string keyValue = textBox Text ;WritePrivateProfileString ( section key keyValue FileName ) ;MessageBox Show ( 成功写入INI文件!信息 ) ;}//读取指定INI文件的特定段落中的关键字的数值private void button _Click ( object sender System EventArgs e ){this Controls AddRange ( new System Windows Forms Control [ ] {this buttonthis textBoxthis textBoxthis textBoxthis buttonthis textBoxthis buttonthis labelthis labelthis label } ) ;this MaximizeBox = false ;this Name = Form ;this Text = C#操作INI文件写操作 ;this ResumeLayout ( false ) ;}[STAThread]static void Main ( ){Application Run ( new Form ( ) ) ;}private void button _Click ( object sender System EventArgs e ){openFileDialog ShowDialog ( ) ;textBox Text = openFileDialog FileName ;}//写入INI文件private void button _Click ( object sender System EventArgse ){string FileName = textBox Text ;string section = textBox Text ;string key = textBox Text ;string keyValue = textBox Text ;WritePrivateProfileString ( section key keyValue FileName ) ;MessageBox Show ( 成功写入INI文件!信息 ) ;}//读取指定INI文件的特定段落中的关键字的数值private void button _Click ( object sender System EventArgs e ){StringBuilder temp = new StringBuilder ( ) ;string FileName = textBox Text ;string section = textBox Text ;string key = textBox Text ;int i = GetPrivateProfileString ( section key无法读取对应数值! emp FileName ) ;//显示读取的数值textBox Text = temp ToString ( ) ;}}}总结通过上面的这些介绍可以看成C#操作INI文件的过程其实就是C#调用Win 的API函数的过程掌握了如何在C#申明Win 的API函数再来操作INI就显得非常简单lishixinzhi/Article/program/ASP/201311/21793。

getprivateprofilestring 注释

getprivateprofilestring 注释

getprivateprofilestring 注释GetPrivateProfileString 是一个Windows API 函数,用于从指定的应用程序的INI 文件中读取字符串。

它用于读取非公共的或私有节的内容。

这个函数对于那些需要在程序运行时从INI 文件中读取配置信息的程序来说是非常有用的。

函数原型如下:cDWORD GetPrivateProfileString(LPCTSTR lpAppName,LPCTSTR lpKeyName,LPCTSTR lpDefault,LPTSTR lpReturnedString,DWORD nSize,LPCTSTR lpFileName);参数说明:lpAppName:指向包含应用程序名称的字符串的指针。

这个名称是INI 文件中的一个节。

lpKeyName:指向包含键名称的字符串的指针。

这个名称是INI 文件中节内的条目。

lpDefault:指向一个字符串的指针,该字符串在lpKeyName 指定的键不存在时作为默认值返回。

lpReturnedString:指向接收返回的字符串的缓冲区的指针。

nSize:缓冲区的大小(以字符数表示)。

lpFileName:指向包含INI 文件名的字符串的指针。

这个函数通常用于读取应用程序的配置信息,比如设置文件路径、窗口大小、颜色方案等。

如果你需要为这个函数添加注释,你可以这样写:// 从指定的INI 文件中读取一个字符串值。

如果键不存在,则返回默认值。

// 参数说明:// lpAppName - INI 文件中的节名称。

// lpKeyName - 节内的键名称。

// lpDefault - 默认返回值(如果键不存在)。

// lpReturnedString - 接收返回的字符串的缓冲区。

// nSize - 缓冲区的大小(以字符数表示)。

// lpFileName - INI 文件名。

// 返回值:如果函数成功,则返回读取的字符串长度(不包括结束字符)。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

在VB6中用WINDOWS API函数读写INI文件INI文件在Windows3.2的时代扮演着极其重要的角色,主要用于保存软件参数的设置。

但到了Windows95/98的年代,微软推出了注册表,一般要求软件将所有的参数设置全保存到注册表中去。

这样一来,当用户安装的软件越来越多的时候,就会导致注册表越来越庞大,从而令到系统运行速度变慢,稳定性变差。

所以,在某些情况下,如:软件需要保存的数据不多或要制作“绿色软件”时,我们仍然经常用到INI文件。

《家用电脑》自1999年以来已经有不少文章介绍过在编程时如何读写INI文件的方法,但多是基于C++或Delphi的,对于目前最为流行的编程语言之一的Visual Basic却没有提及。

现笔者根据自己的使用经验,将VB中读写INI文件的方法总结出来,以和各位“大虾”共同探讨一下。

方法当然也是利用Windows本身提供的API函数。

对INI文件的读写操作,Windows 提供了如下几个常用的 API函数:GetPrivateProfileInt()、GetPrivateProfileSection()、GetPrivateProfileString()、WritePrivateProfileSection()、WritePrivateProfileString()。

由于在《家用电脑》1999年第21期的《利用Windows API函数在Delphi中对INI文件读写》(以下简称《利》文)中已经对上述5个函数作了详细的介绍。

虽然《利》文介绍的方法是在Delphi中实现的,但除了声明方式外,函数的功能和参数的含义是相同的,所以,笔者就不再详述了,在此仅给出它们在VB中的声明方式及作用:Public Declare Function GetPrivateProfileInt Lib ″kernel32″Alias ″GetPrivateProfileIntA″ (ByVal lpApplicationName As String,ByVal lpKeyName As String, ByVal nDefault As Long, ByVal lpFileName AsString) As Long。

用于判断指定的INI文件是否可以正确进行操作。

Public Declare Function GetPrivateProfileSection Lib ″kernel32″Alias ″GetPrivateProfileSectionA″ (ByVal lpAppName As String, ByVal lpReturnedString As String, ByVal nSize As Long, ByVal lpFileName AsString) As Long。

用于读取INI文件中指定段的键名称及该键的值。

Public Declare Function GetPrivateProfileString Lib ″kernel32″Alias ″GetPrivateProfileStringA″ (ByVal lpApplicationName As String,ByVal lpKeyName As Any, ByVal lpDefault As String, ByVallpReturnedString As String, ByVal nSize As Long, ByVal lpFileName AsString) As Long。

用于读取INI文件中指定的段和键的键值。

Public Declare Function WritePrivateProfileSection Lib ″kernel32″Alias ″WritePrivateProfileSectionA″ (ByVal lpAppName As String, ByVallpString As String, ByVal lpFileName As String) As Long。

用于完成INI文件中指定的段内所有键的键值的写入。

Public Declare Function WritePrivateProfileString Lib ″kernel32″Alias ″WritePrivateProfileStringA″ (ByVal lpApplicationName As String,ByVal lpKeyName As Any, ByVal lpString As Any, ByVal lpFileName AsString) As Long。

用于完成INI文件中指定的段和键的键值的写入。

怎么样,看了以上的函数声明,是不是感到头昏脑胀?更不要说要一字不错地输入到程序去了。

在此,笔者要告诉大家一个简单的方法:通过“API文本浏览器”复制法。

依次点击“开始”-“程序”-“Microsoft Visual Basic 6.0 中文版”-“Microsoft Visual Basic 6.0 中文版工具”-“API文本浏览器”,即可运行“API文本浏览器”。

如图1所示,选择“文件”菜单下的“加载文本文件”命令,打开一个叫“Win32api.txt”的文件(该文件在Visual Studio安装目录下的“Common\Tools\Winapi”子目录下)。

然后,在“API类型”下选择“声明”,再在下面的输入框中输入你要查找的函数名,如:“GetPrivate ProfileInt”,按下回车,你就可以在“选定项”下的文本框中看到该函数的具体声明方式了。

此时按下“复制”按钮,就可以将该声明复制到剪贴板中,接就可以将其粘贴到程序中去了。

光说不练可不行,下面笔者就通过一个简单的例子演视一下如何在VB6中用以上的API函数读写INI文件。

首先,新建一个工程,在窗体上添加四个Label控件,将其″Caption″属性分别设置为:″INI文件:″、″段名称:″、″键名称:″、″键值:″。

再分别在这四个Label控件旁边添加四个Text控件,将其″名称″属性分别设置为:″txtFileName″、″txt ApplicationName″、″txtKey Name″、″txt KeyValue″,将其″Text″属性全设置为空。

最后,添加两个″Command″控件,将其″名称″属性分别设置为:″cmdRead″、″cmdWrite″,″Caption″属性分别设置为:″读取″、″写入″。

完成界面设计后,在代码窗口中输入以下代码:Option ExplicitPrivate Sub cmdRead_Click() '读取健值Dim lpReturnedString As String * 50Dim lpApplicationName As String,lpKeyName As String, lpDefault As String, lpFileName As StringDim X As LonglpFileName = txtFileName.Text '指定要进行操作的INI文件lpApplicationName = txtApplicationName.Text '设置要读取的段名称(字符串型)lpKeyName = txtKeyName.Text '设置要读取的键名称(字符串型)lpDefault = ″″ '设定当指定的段或键没找到时返回的值X=Get Private Profile String(lpApplication Name,lp Key Name, lpDefault,lpReturned String,Len(lp Returned String), lp FileName)If X =0 Then '指定的段或键没找到时txtKeyValue.Text = ″Failure″BeepElsetxtKeyValue.Text = Trim(lpReturnedString) '输出得到的键值End IfEnd SubPrivate Sub cmdWrite_Click() '写入健值Dim lpApplicationName As String, lpFileName As String, lpKeyNameAs String, lpString As StringDim X As LonglpFileName = txtFileName.Text '指定要进行操作的INI文件lpApplicationName = txtApplicationName.Text '设定段名称(字符串型)lpKeyName = txtKeyName.Text '设定键名称(字符串型)lpString = txtKeyValue.Text '要写入的键值。

X =WritePrivateProfileString(lp ApplicationName,lpKeyName, lpString,lpFileName)If X = 0 Then '当写入失败时BeepEnd IfEnd Sub然后,选择“工程”菜单下的“添加模块”命令,在模块代码窗口输入如下代码:Public Declare Function GetPrivateProfileString Lib ″kernel32″Alias ″GetPrivateProfileStringA″ (ByVal lpApplicationName As String,ByVal lpKeyName As Any, ByVal lpDefault As String, ByVallpReturnedString As String, ByVal nSize As Long, ByVal lpFileName AsString) As LongPublic Declare Function WritePrivateProfileString Lib ″kernel32″Alias ″WritePrivateProfileStringA″ (ByVal lpApplicationName As String,ByVal lpKeyName As Any, ByVal lpString As Any, ByVal lpFileName AsString) As Long到此,一个简单的INI文件读写程序就完成了。

点击运行按钮,你将看到如图2所示的运行界面。

你只要在第1-3个文本框中依次输入要进行操作的INI文件的路径名称、要读取的节名称和键名称,然后按下“读取”按钮,就可以在第4个文本框中看到要读取的键的键值。

相关文档
最新文档