VBGood网站全文搜索 Google

搜索VBGood全站网页(全文搜索)
首页 - 经验之谈 - 精通WIN2000U新功能
发表评论(0)作者:张智亮, 平台:VB6.0+Win98, 阅读:9928, 日期:2000-11-30
精通WIN2000U新功能


--------------------------------------------------------------------------------

   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 As String) 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 As String) As Long。用于读取INI文件中指定段的键名称及该键的值。
  Public 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 Long。用于读取INI文件中指定的段和键的键值。
  Public Declare Function WritePrivateProfileSection Lib ″kernel32″ Alias ″WritePrivateProfileSectionA″ (ByVal lpAppName As String, ByVal lpString 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 As String) 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 String
  Dim X As Long
  lpFileName = txtFileName.Text 注释:指定要进行操作的INI文件
  lpApplicationName = txtApplicationName.Text 注释:设置要读取的段名称(字符串型)
  lpKeyName = txtKeyName.Text 注释:设置要读取的键名称(字符串型)
  lpDefault = ″″ 注释:设定当指定的段或键没找到时返回的值
  X=Get Private Profile String(lpApplication Name,lp Key Name, lp Default,lpReturned String,Len(lp Returned String), lp FileName)
  If X =0 Then 注释:指定的段或键没找到时
  txtKeyValue.Text = ″Failure″
  Beep
  Else
  txtKeyValue.Text = Trim(lpReturnedString) 注释:输出得到的键值
  End If
  End Sub
  Private Sub cmdWrite_Click() 注释:写入健值
  Dim lpApplicationName As String, lpFileName As String, lpKeyName As String, lpString As String
  Dim X As Long
  lpFileName = txtFileName.Text 注释:指定要进行操作的INI文件
  lpApplicationName = txtApplicationName.Text 注释:设定段名称(字符串型)
  lpKeyName = txtKeyName.Text 注释:设定键名称(字符串型)
  lpString = txtKeyValue.Text 注释:要写入的键值。
  X =WritePrivateProfileString(lp ApplicationName,lpKeyName, lpString, lpFileName)
  If X = 0 Then 注释:当写入失败时
  Beep
  End If
  End Sub
  然后,选择“工程”菜单下的“添加模块”命令,在模块代码窗口输入如下代码:
  Public 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 Long
  Public Declare Function WritePrivateProfileString Lib ″kernel32″ Alias ″WritePrivateProfileStringA″ (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpString As Any, ByVal lpFileName As String) As Long
  到此,一个简单的INI文件读写程序就完成了。点击运行按钮,你将看到如图2所示的运行界面。你只要在第1-3个文本框中依次输入要进行操作的INI文件的路径名称、要读取的节名称和键名称,然后按下“读取”按钮,就可以在第4个文本框中看到要读取的键的键值。如果指定的段或键没找到时,此处会显示“Failure”。或者你再在第4个文本框中输入一个值,然后按下“写入”,就可以将一个值写入到指定的键中去。
  在实际编程中我们会发现:用写函数对INI文件进行写操作时,就算要进行操作的INI文件、节名称或者键名称不存在,程序都可以自动建立新的INI文件、节或者键。
  上面只是介绍了GetPrivateProfileString()和WritePrivateProfileString()两个函数的用法,其它三个函数的用法也与之相类似。实际上,我们在编程中经常用到的也就这两个函数。
  怎么样,是不是很简单?赶快把它应用到自己的程序中去吧,就当是帮Windows减减″肥″吧!(广东 张智亮)