cIniFile

By | 2002-06-01

Complete access to INI files through a simple class module, which works with VB4 16,32 and VB5. This class module allows you to read/write INI values, delete values, delete sections and query whole sections through a simple inteface.

Original Author: Steve McMahon

Inputs

Here is a sample of using the cIniFile class:
dim cIni as new cIniFile
with cIni
.Path = “C:WINDOWSSYSTEM.INI” ‘ Use GetWindowsDir() call to find the correct dir
.Section = “boot” ‘ Look under the section headed [boot]
.Key = “shell” ‘ Search for shell=
if (ucase$(trim$(.Value)) = “EXPLORER.EXE”) then ‘ Get the section value
msgbox “Da Shell is here”,vbInformation
else
msgbox “Da Computer is too old….”,vbExclamation
endif
‘ end with

Assumptions

Save the code into a file called cIniFile.cls and add it to your project. Follow the sample code in the top comment block to try it out.

Code

Option Explicit
' *************************************************************************************
' Description:
' A complete class for access to Ini Files. Works in
' VB4 16 and 32 and VB5.
'
' Sample code: find out whether we are running the Windows
' 95 shell or not:
'
' dim cIni as new cIniFile
' with cIni
'  .Path = "C:WINDOWSSYSTEM.INI"   ' Use GetWindowsDir() call to find the correct dir
'  .Section = "boot"
'  .Key = "shell"
'  if (ucase$(trim$(.Value)) = "EXPLORER.EXE") then
'    msgbox "Da Shell is here",vbInformation
'  else
'    msgbox "Da Computer is too old..",vbExclamation
'  endif
' end with
'
' FileName: cIniFile.Cls
' Author:  Steve McMahon (Steve-McMahon@pa-consulting.com)
' Date:   30 June 1997
' *************************************************************************************

' Private variables to store the settings made:
Private m_sPath As String
Private m_sKey As String
Private m_sSection As String
Private m_sDefault As String
Private m_lLastReturnCode As Long
' Declares for cIniFile:
#If Win32 Then
  ' Profile String functions:
  Private Declare Function WritePrivateProfileString Lib "KERNEL32" Alias "WritePrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpString As String, ByVal lpFileName As String) As Long
  Private Declare Function GetPrivateProfileString Lib "KERNEL32" Alias "GetPrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpDefault As Any, ByVal lpReturnedString As String, ByVal nSize As Long, ByVal lpFileName As String) As Long
#Else
  ' Profile String functions:
  ' If you are developing in VB5, delete this section
  ' otherwise SetupKit gets **confused**!
  Private Declare Function WritePrivateProfileString Lib "Kernel" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpString As Any, ByVal lpFileName As String) As Integer
  Private Declare Function GetPrivateProfileString Lib "Kernel" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpDefault As Any, ByVal lpReturnedString As String, ByVal nSize As Integer, ByVal lpFileName As String) As Integer
#End If
Property Get LastReturnCode() As Long
  ' Did the last call succeed?
  ' 0 if not!
  LastReturnCode = m_lLastReturnCode
End Property
Property Let Default(sDefault As String)
  ' What to return if something goes wrong:
  m_sDefault = sDefault
End Property
Property Get Default() As String
  ' What to return if something goes wrong:
  Default = m_sDefault
End Property
Property Let Path(sPath As String)
  ' The filename of the INI file:
  m_sPath = sPath
End Property
Property Get Path() As String
  ' The filename of the INI file:
  Path = m_sPath
End Property
Property Let Key(sKey As String)
  ' The KEY= bit to look for
  m_sKey = sKey
End Property
Property Get Key() As String
  ' The KEY= bit to look for
  Key = m_sKey
End Property
Property Let Section(sSection As String)
  ' The [SECTION] bit to look for
  m_sSection = sSection
End Property
Property Get Section() As String
  ' The [SECTION] bit to look for
  Section = m_sSection
End Property
Property Get Value() As String
  ' Get the value of the current Key within Section of Path
Dim sBuf As String
Dim iSize As String
Dim iRetCode As Integer
  sBuf = Space$(255)
  iSize = Len(sBuf)
  iRetCode = GetPrivateProfileString(m_sSection, m_sKey, m_sDefault, sBuf, iSize, m_sPath)
  If (iSize > 0) Then
    Value = Left$(sBuf, iRetCode)
  Else
    Value = ""
  End If
End Property
Property Let Value(sValue As String)
  ' Set the value of the current Key within Section of Path
Dim iPos As Integer
  ' Strip chr$(0):
  iPos = InStr(sValue, Chr$(0))
  Do While iPos <> 0
    sValue = Left$(sValue, (iPos - 1)) & Mid$(sValue, (iPos + 1))
    iPos = InStr(sValue, Chr$(0))
  Loop
  m_lLastReturnCode = WritePrivateProfileString(m_sSection, m_sKey, sValue, m_sPath)
End Property
Public Sub DeleteValue()
  ' Delete the value at Key within Section of Path
  m_lLastReturnCode = WritePrivateProfileString(m_sSection, m_sKey, 0&, m_sPath)
End Sub
Public Sub DeleteSection()
  ' Delete the Section in Path
  m_lLastReturnCode = WritePrivateProfileString(m_sSection, 0&, 0&, m_sPath)
End Sub
Property Get INISection() As String
  ' Return all the keys and values within the current
  ' section, separated by chr$(0):
Dim sBuf As String
Dim iSize As String
Dim iRetCode As Integer
  sBuf = Space$(255)
  iSize = Len(sBuf)
  iRetCode = GetPrivateProfileString(m_sSection, 0&, m_sDefault, sBuf, iSize, m_sPath)
  If (iSize > 0) Then
    INISection = Left$(sBuf, iRetCode)
  Else
    INISection = ""
  End If
End Property
Property Let INISection(sSection As String)
  ' Set one or more the keys within the current section.
  ' Keys and Values should be separated by chr$(0):
  m_lLastReturnCode = WritePrivateProfileString(m_sSection, 0&, sSection, m_sPath)
End Property

Author: dwirch

Derek Wirch is a seasoned IT professional with an impressive career dating back to 1986. He brings a wealth of knowledge and hands-on experience that is invaluable to those embarking on their journey in the tech industry.

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.