출처 : http://www.autohotkey.com/board/topic/19650-auto-readload-and-save-an-ini-file-updated/
ini read, write 에 대해서 쉽게 접근하기 힘든 분들과,
ini를 쉽게 사용하는 분들이라도 귀찮은 부분이 있습니다.
.. 이 스크립트를 사용하면 쉽게 그리고, 귀찮은 부분을 해결할 수 있을 것 같습니다.
선택저장이 안된다는 단점이 있습니다.
일단 소스부터 나갑니다.
/*
INI_Init(inifile) ;prepares the global variables to be populated
INI_Load(inifile) ;Reads all the settings into the global variables from the file
INI_Save(inifile) ;Saves all the settings from the global variables into the file
INI_ReadAll(inifile) ;Synonym for INI_Load
INI_WriteAll(inifile) ;Synonym for INI_Save
*/
INI_Init(inifile = "inifile.ini"){
global
local key
inisections:=0
loop,read,%inifile%
{
if regexmatch(A_Loopreadline,"\[(\w+)]")
{
inisections+= 1
section%inisections%:=regexreplace(A_loopreadline,"(\[)(\w+)(])","$2")
section%inisections%_keys:=0
}
else if regexmatch(A_LoopReadLine,"(\w+)=(\w+)")
{
section%inisections%_keys+= 1
key:=section%inisections%_keys
section%inisections%_key%key%:=regexreplace(A_LoopReadLine,"(\w+)=(.*)","$1")
}
}
}
INI_readAll(inifile="inifile.ini"){
INI_load(inifile)
}
INI_load(inifile="inifile.ini"){
global
local sec,var
loop,%inisections%
{
sec:=A_index
loop,% section%a_index%_keys
{
var:=section%sec% "_" section%sec%_key%A_index%
iniread,%var%,%inifile%,% section%sec%,% section%sec%_key%A_index%
}
}
}
INI_writeAll(inifile="inifile.ini"){
INI_Save(inifile)
}
INI_Save(inifile="inifile.ini"){
global
local sec,var
loop,%inisections%
{
sec:=A_index
loop,% section%a_index%_keys
{
var:=section%sec% "_" section%sec%_key%A_index%,var:=%var%
iniwrite,%var%,%inifile%,% section%sec%,% section%sec%_key%A_index%
}
}
}
위의 소스가 전부입니다.
사용방법은
스크립트 시작할때 : INI_Init( ini파일명 ) - 최초 1번만
ini를 불러올때 : INI_Load( ini파일명 )
ini를 저장할때 : INISave( ini파일명 )
이게 끝입니다.
예제를 위해 inifile.ini 를 아래와 같이 만들겠습니다.
[Options]
font=Vernda
[Window]
positionX=100
positionY=100
위 ini 파일의 변수는 INI_Init, INI_Load 를 하게되면 글로벌 변수로
Options_font = Vernda
Window_positionX = 100
Window_positionY = 100
이렇게 저장됩니다.
만약 Options_font 의 내용을 변경후 INI_Save를 하게 된다면, 자동적으로 ini 파일의 내용이 변경됩니다.
아래 예제 남깁니다.
inifile = inifile.ini
;here is where we use our new user library functions.
INI_Init(inifile)
INI_Load(inifile)
Gui, Add, Text, , Options_font
Gui, Add, Edit, vOptions_font, % Options_font
Gui, Add, Button, gSave, 저장
Gui, Add, Button, gRestart, 재시작
Gui, Show, x%Window_positionX% y%Window_positionY% w150 h130
Return
GuiClose:
WinGetPos, Window_positionX, Window_positionY
INI_Save(inifile)
ExitApp
Return
Save:
Gui, Submit, NoHide
INI_Save(inifile)
MsgBox, 저장완료
Return
Restart:
WinGetPos, Window_positionX, Window_positionY
INI_Save(inifile)
Reload
예제의 기능은 Options_font 저장, Gui 위치 저장입니다.