INIファイルの読み書き!!

レジストリにデータを書きたくない時
テキストファイルで修正を加えたい時 等にお使いください。



'===========================================================================
'    ファイル名    : basIniFunctions.bas
'    ファイル説明  : INIファイル読み書き
'    作成者        : Uz
'    作成日        : 1998/02/10 (Tue)
'    修正日        : 1998/02/10 (Tue)
'    備考          : なし
'===========================================================================
Option Explicit

' -- API関数宣言
Private Declare Function WritePrivateProfileString Lib "kernel32" Alias "WritePrivateProfileStringA" ( _
    ByVal lpApplicationName As String, _
    ByVal lpKeyName As String, _
    ByVal lpString As Any, _
    ByVal lpFileName As String _
) As Long

Private 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 _
) As Long

'///////////////////////////////////////////////////////////////////////////
'      関数名    : GetIniString
'      目的説明  : Iniファイルから読み込む
'      前提条件  : なし
'      結果      : なし
'      引数      : String   strFileName     : INIファイル名
'                  String   strSection      : セクション
'                  String   strKey          : キー
'                  String   strDeault       : デフォルト文字列
'      戻り値    : String                   : 読み込み文字列
'      備考      ; 読み込み文字列は 512バイトまで
'///////////////////////////////////////////////////////////////////////////
Public Function GetIniString(strFileName As String, strSection As String, strKey As String, strDefault As String) As String
    Dim strbuf As String * 512
    Dim lngSize As Long
    
    If StrComp(Right(strFileName, 3), ".ini", 1) <> 0 Then
        strFileName = strFileName & ".ini"
    End If
    
    lngSize = 512
    Call GetPrivateProfileString( _
        strSection, _
        strKey, _
        strDefault, _
        ByVal strbuf, _
        lngSize, _
        strFileName _
    )
    GetIniString = Left(strbuf, lngSize)
End Function

'///////////////////////////////////////////////////////////////////////////
'      関数名    : WriteIniString
'      目的説明  : Iniファイルに書き込む
'      前提条件  : なし
'      結果      : なし
'      引数      : String   strFileName     : INIファイル名
'                  String   strSection      : セクション
'                  String   strKey          : キー
'                  String   strDeault       : デフォルト文字列
'      戻り値    : なし
'      備考      ; なし
'///////////////////////////////////////////////////////////////////////////
Public Sub WriteIniString(strFileName As String, strSection As String, strKey As String, strValue As String)
    If StrComp(Right(strFileName, 3), ".ini", 1) <> 0 Then
        strFileName = strFileName & ".ini"
    End If
    Call WritePrivateProfileString( _
        strSection, _
        strKey, _
        strValue, _
        strFileName _
    )
End Sub

'===========================================================================
'    ファイル名    : frmIniTest.frm
'    ファイル説明  : Iniファイル読み書きを使ってフォームの座標を保存して
'                    次の実行時に前回の位置で開く
'    作成者        : Uz
'    作成日        : 1998/02/10 (Tue)
'    修正日        : 1998/02/10 (Tue)
'    備考          : なし
'===========================================================================
Private Sub Form_Load()
    '読み込み
    Me.Left = GetIniString(App.Path & "\" & App.EXEName, "Position", "Left", Me.Left)
    Me.Top = GetIniString(App.Path & "\" & App.EXEName, "Position", "Top", Me.Top)
End Sub

Private Sub Form_Unload(Cancel As Integer)
    '書き込み
    Call WriteIniString(App.Path & "\" & App.EXEName, "Position", "Left", Me.Left)
    Call WriteIniString(App.Path & "\" & App.EXEName, "Position", "Top", Me.Top)
End Sub