INIファイルは、ソフトウェアの設定などを記録するために用いられるファイル形式の一つです。拡張子はiniで、初期化を意味するinitializationからきています。中身はただのテキストなのでメモ帳などのテキストファイルで開いて編集することができます。
iniの他にも構成を意味するconfigurationの略であるcfgやconf、あるいはtxtなども使われます。
UWSCのソフトに関する設定情報はC:\Users\username\AppData\Roaming\UWSC\のフォルダ内にあります。usernameには自身のユーザー名を入れてください。
以下のプログラムを実行すると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)です。
name=value
セクション名が違えば同じキー名が存在しても問題ありません。
セクション
パラメータは任意の名前を持つセクションでグループ分けすることができます。セクションは[ ]で囲み定義します。
[SECTION]
グループ化したいパラメータをセクションを記述した次の行から一行ずつ書いていきます。
[SECTION]
name1=value1
name2=value2
name3=value3
セクションの範囲はセクション名を指定してから次のセクション名を指定するまで、もしくはファイルの終端までとなります。
UWSC.INIを例に説明すると、セクション名がSETのパラメータは、キー名がPositionからRecBackGroundまでの17個、セクション名がLUNCHMENUのパラメータはPosition、T1、S1の3つ、セクション名がSCHEDULEのパラメータはファイル終端まででMaxNumber、WakeUp、Soundの3つとなります。
[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関数 (自作関数)で指定したセクションのキー名をまとめて取得することができます。
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
コメント
コメントの開始は;(セミコロン)を記述します。行の先頭に;を記述すると行全体が、行の途中に記述するとそこから行末までがコメント扱いになります。
;コメント