ふぢのVB小技集 |
Iniファイルの使い方がわからない。
(質問)
Iniファイルの使い方がわかりません。やっぱり直接、Iniファイルにアクセスするんですか?
(回答)
Iniファイルに直接アクセスするよりも簡単な方法があります。GetPrivateProfileInt、GetPrivateProfileString、WritePrivateProfileStringという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関数を使用しても良いと思います。