INIファイル

本ページには広告が含まれています。

INIファイルは、ソフトウェアの設定などを記録するために用いられるファイル形式の一つです。拡張子はiniで、初期化を意味するinitializationからきています。中身はただのテキストなのでメモ帳などのテキストファイルで開いて編集することができます。

iniの他にも構成を意味するconfigurationの略であるcfgconf、あるいはtxtなども使われます。

UWSCのソフトに関する設定情報はC:\Users\username\AppData\Roaming\UWSC\のフォルダ内にあります。usernameには自身のユーザー名を入れてください。

以下のプログラムを実行するとUWSCのフォルダのパスを取得することができます。

UWSC
DIM WshShell = CREATEOLEOBJ("WScript.Shell")
PRINT WshShell.ExpandEnvironmentStrings("C:\Users\%USERNAME%\AppData\Roaming\UWSC\")

UWSCでINIファイルの操作を行う関数は以下の3つがあります。

READINI関数 (スクリプト関数)
INIファイルを読み込みます。
WRITEINI関数 (スクリプト関数)
INIファイルの書き込みを行います。
DELETEINI関数 (スクリプト関数)
INIファイルのセクション、キーを削除します。

INIファイルの読み書きを行う自作関数もあります。

INI関数 (自作関数)
INIファイルの読み書きを行います。

INIファイルの基本構造

パラメータ

個々のパラメータ(またはエントリ)はキー(名前)を持ち、=で区切って指定します。

=(イコール)の左側がキー(name)、右側が値(value)です。

INI
name=value

セクション名が違えば同じキー名が存在しても問題ありません。

セクション

パラメータは任意の名前を持つセクションでグループ分けすることができます。セクションは[ ]で囲み定義します。

INI
[SECTION]

グループ化したいパラメータをセクションを記述した次の行から一行ずつ書いていきます。

INI
[SECTION]
name1=value1
name2=value2
name3=value3

セクションの範囲はセクション名を指定してから次のセクション名を指定するまで、もしくはファイルの終端までとなります。

UWSC.INIを例に説明すると、セクション名がSETのパラメータは、キー名がPositionからRecBackGroundまでの17個、セクション名がLUNCHMENUのパラメータはPositionT1S1の3つ、セクション名がSCHEDULEのパラメータはファイル終端まででMaxNumberWakeUpSoundの3つとなります。

UWSC.INI
[SET]
Position=222,558
PlayHotKey=1,2
StopHotKey=2,2
RecHotKey=3,2
TrayHotKey=14,5
LunchMenuHotKey=54,4
MouseOrg=0
NotActive=0
StayOnTop=0
LogLines=2000
DefaultFont=,
TaskTrayStart=1
MainSize=220,61
RecLevel=0
Cp2Clipboard=0
NotExtraMovRec=0
RecBackGround=0
[LUNCHMENU]
Position=0,0
T1=サンプル
S1=.\sample\サンプル.UWS
[SCHEDULE]
MaxNumber=40
WakeUp=0
Sound=0

INI関数 (自作関数)で指定したセクションのキー名をまとめて取得することができます。

UWSC
FOR item IN INI.Read("SET", NULL, "UWSC.INI")
	PRINT item
NEXT

//////////////////////////////////////////////////
// 【引数】
//   section : セクション 
//   key : キー(Delete関数は省略可) 
//   value : 値 
//   path : INIファイルのパス 
//   default : セクションとキーが存在しなかった場合に返す値 
// 【戻り値】
//   
//////////////////////////////////////////////////
MODULE INI
	DEF_DLL GetPrivateProfileStringW(wstring,wstring,wstring,var pwchar,dword,wstring):dword:kernel32
	DEF_DLL WritePrivateProfileStringW(wstring,wstring,wstring,wstring):bool:kernel32
	FUNCTION Read(section = NULL, key = NULL, path = NULL, default = EMPTY)
		DIM FSO = CREATEOLEOBJ("Scripting.FileSystemObject")
		IFB path = NULL THEN
			path = FSO.GetAbsolutePathName(FSO.GetBaseName(GET_UWSC_NAME) + ".INI")
		ELSE
			path = FSO.GetAbsolutePathName(path)
		ENDIF
		DIM n = 1024
		DIM buffer = FORMAT(CHR(0), n)
		IFB GetPrivateProfileStringW(section, key, default, buffer, n, path) = 0 THEN
			RESULT = default
		ELSE
			RESULT = SLICE(SPLIT(buffer, CHR(0), TRUE))
			IF section <> NULL AND key <> NULL THEN RESULT = RESULT[0]
		ENDIF
	FEND
	FUNCTION Write(section, key, value, path = NULL)
		DIM FSO = CREATEOLEOBJ("Scripting.FileSystemObject")
		IFB path = NULL THEN
			path = FSO.GetAbsolutePathName(FSO.GetBaseName(GET_UWSC_NAME) + ".INI")
		ELSE
			path = FSO.GetAbsolutePathName(path)
		ENDIF
		RESULT = WritePrivateProfileStringW(section, key, value, path)
	FEND
	PROCEDURE Delete(section, key = NULL, path = NULL)
		DIM FSO = CREATEOLEOBJ("Scripting.FileSystemObject")
		IFB path = NULL THEN
			path = FSO.GetAbsolutePathName(FSO.GetBaseName(GET_UWSC_NAME) + ".INI")
		ELSE
			path = FSO.GetAbsolutePathName(path)
		ENDIF
		PRINT WritePrivateProfileStringW(section, key, NULL, path)
	FEND
	FUNCTION escape(value)
		DIM esc = ";#=:"
		FOR i = 1 TO LENGTH(esc)
			DIM s = COPY(esc, i, 1)
			value = REPLACE(value, s, "\" + s)
		NEXT
		RESULT = value
	FEND
	FUNCTION unescape(value)
		DIM esc = ";#=:"
		FOR i = 1 TO LENGTH(esc)
			DIM s = COPY(esc, i, 1)
			value = REPLACE(value, "\" + s, s)
		NEXT
		RESULT = value
	FEND
ENDMODULE

コメント

コメントの開始は;(セミコロン)を記述します。行の先頭に;を記述すると行全体が、行の途中に記述するとそこから行末までがコメント扱いになります。

INI
;コメント