ふぢのVB小技集

Iniファイルの使い方がわからない。

(質問)
Iniファイルの使い方がわかりません。やっぱり直接、Iniファイルにアクセスするんですか?



(回答)
Iniファイルに直接アクセスするよりも簡単な方法があります。GetPrivateProfileIntGetPrivateProfileStringWritePrivateProfileStringというWindowsAPIを使えば安全・安心・確実にIniファイルを読み書きすることができます。



(解説)


まず、Iniファイルの内容を見てみましょう。

下のIniファイルのように1行目に適当なアプリケーション名を決めて、カッコで囲みます。このアプリケーション名を使用してAPIを呼び出します。
その下に、実際にプログラムで使用するキーワードを書いていきます。
Iniファイルの読み書きは基本的に文字列で行いますが、読み込みに限って数値でも可能です。


Iniファイルを見てみよう

[Maze]
Version=1.31
Speed=0



まず、WindowsAPIを使用するために、標準モジュールかFormのGeneralプロシージャに以下の宣言を追加します。

標準モジュール、またはFormのGeneralプロシージャに以下の宣言文を追加する
'*************************************************************
'初期化ファイル(iniファイル)から数値情報を取得するAPI
'*************************************************************
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ファイル)から文字列情報を取得するAPI
'*************************************************************
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ファイル)に文字列情報を設定するAPI
'*************************************************************
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ファイルから文字列や数値を読みこんでみましょう。

Iniファイルから文字列や数値を読みこむ
Global Version As String         'バージョン設定エリア
Global Speed As Long             'スピード設定エリア

Private Sub Form_Load()
    Dim StrBuf As String * 100          'GetPrivateProfileStringの文字列取得エリア
    Dim MyPath As String                'フルパスファイル名
    Dim IniPath As String               '初期化ファイル名


    'EXEファイルがあるパス名を取得
    MyPath = App.Path
    'パス名の最後に"\"が無いか
    If Right$(MyPath, 1) <> "\" Then
        'パス名の最後に"\"を付加する
        MyPath = MyPath & "\"
    End If

    'iniファイルのフルパス名称取得
    IniPath = MyPath + "Maze.ini"

    'プログラムバージョンを読み込む
    Ret = GetPrivateProfileString("Maze", "Version", "1.0", StrBuf, 100, IniPath)
    Version = StrBuf
    'スピードを読み込む
    Speed = GetPrivateProfileInt("Maze", "Speed", 16, IniPath)

End Sub



Iniファイルから文字列を読みこむには、GetPrivateProfileStringを使用します。
パラメータの意味は、“アプリケーション名”, “キーワード”, “デフォルト値”, “文字列を読みこむエリア”, “文字列を読みこむエリアのサイズ”, “Iniファイルの場所”です

Iniファイルから数値を読みこむには、GetPrivateProfileIntを使用します。
パラメータの意味は、“アプリケーション名”, “キーワード”, “デフォルト値”, “Iniファイルの場所”です



読みこみが出来たら、Iniファイルに書きこんでみましょう。
先にも述べましたが書き込む際は文字列でしか書きこめません。数値の場合は文字列に変換してから書きこみましょう。

Iniファイルに文字列を書きこむ
Global Version As String         'バージョン設定エリア
Global Speed As Long             'スピード設定エリア

Private Sub CmdOk_Click()
    Dim StrBuf As String                    '文字列編集エリア

    'iniファイルにバージョンを書き込む
    StrBuf = Format$(Version)
    Ret = WritePrivateProfileString("NedSeat", "DefaultFloar", StrBuf, IniPath)
    'iniファイルにスピードを書き込む
    StrBuf = Format$(Speed)
    Ret = WritePrivateProfileString("NedSeat", "FormBackColor", StrBuf, IniPath)

End Sub

この例では、データが数値、文字列のどちらのときでもFormat関数を使って、同じような処理になるようにしています。
好みによって、数値の場合だけFormat関数やStr関数を使用しても良いと思います。

戻る