rcmdnk's blog

20171108_ahkini0_200_200

前回、 AutoHotkeyでGuiを使って値を入力する ことをやったので 今回はスクリプトの設定値を色々変更した時に 設定ファイルに書き出し、次回起動時にそれを読み込む、 ということをやってみます。

Sponsored Links

AutoHotkeyでの設定ファイルの読み書き

スクリプト例はこちら。

read_write_setting.ahk
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
; Set variables for the setting file
IniDir := % A_AppData . "\AutoHotkey"
IniFile := % IniDir . "\my_ahk.ini"
MySection1 := "Section 1"
MySection2 := "Section 2"

; Initial values
MyVal1 := 0
MyVal2 := "Text variable"
MyVal3 := 1

; Read the setting file
ReadValue()

; Make menu for setting
Menu, Tray, Add
Menu, Tray, Add, My Setting, MenuMySetting

Return

; Menu action, launch setting gui
MenuMySetting:
  Gui, MySetting:+LabelMySetting -MinimizeBox

  if(MyVal1 == 1){
    Gui, MySetting:Add, Checkbox, Checked vMyVal1, MyVal1
  }else{
    Gui, MySetting:Add, Checkbox, vMyVal1, MyVal1
  }

  Gui, MySetting:Add, Text, Y+20, MyVal2:
  Gui, MySetting:Add, Edit, x+10 W200 vMyVal2, %MyVal2%

  Gui, MySetting:Add, Text, xm Y+20, MyVal3:
  Gui, MySetting:Add, Edit, X+10
  Gui, MySetting:Add, UpDown, vMyVal3 range0-10, %MyVal3%

  Gui, MySetting:Add, Button, gMySettingOK W100 X45 Default ,OK
  Gui, MySetting:Add, Button, gMySettingCancel W100 X+10, Cancel
  Gui, MySetting:Show, W300, My Setting
Return

; Buttons or other actions on MySetting Gui
MySettingOK:
  Gui, MySetting:Submit
  WriteValue()
MySettingCancel:
MySettingClose:
MySettingEscape:
  Gui, MySetting:Destroy
Return

; Read the setting file
ReadValue(){
  global
  IniRead, MyVal1, %IniFile%, %MySection1%, MyVal1Key, %MyVal1%
  IniRead, MyVal2, %IniFile%, %MySection2%, MyVal2Key, %MyVal2%
  IniRead, MyVal3, %IniFile%, %MySection2%, MyVal1Key, %MyVal3%
}

; Write out to the setting file
WriteValue(){
  global
  IfNotExist, %IniDir%
    FileCreateDir, %IniDir%

  IniWrite, %MyVal1%, %IniFile%, %MySection1%, MyVal1Key
  IniWrite, %MyVal2%, %IniFile%, %MySection2%, MyVal2Key
  IniWrite, %MyVal3%, %IniFile%, %MySection2%, MyVal1Key
}

MenuやGuiについては前回、前々回の記事で詳しく書いています。

上の例では

C:\Users\<USER>\AppData\Roaming\AutoHotkey\my_ahk.ini

というファイルに設定を書き込んで、起動時に読み込んでいます。 一般的なAppData\Roamingの中に設定ファイルを作っていますが、 スクリプトと同じフォルダとかにしたかったら、

 IniDir := % A_LineFile . "\..\"

とします。

このスクリプトの一連の流れとしては

  • 変数のMyVal1とかに初期値を入れる。
  • ReadValue()で設定ファイルから値を読み込む。
  • 変数の変更が出来るGuiを作り、それをメニューから起動できるようにする。
    • GuiでOKを押した場合、入力を変数に反映させ、ファイルに書き出す。

と言った感じ。

ahkini0

メニューに追加されたMy Settingをクリックすると上の様な感じのウィンドウが出ます。

値を変更してOKを押してもう一度立ち上げるとちゃんと反映されてるはずです。 ただ、この状態だと中で変数をキープしてるだけでも出来るので、 値を変更した後に、一度Exitしてスクリプトを終了させ、 もう一度立ち上げてウィンドウで値を確認してみます。

ahkini1

なんらか自分で先にいれた値が出てくれば成功です。

読み書きは基本的に

IniRead, <Output>, <File>, <Section>, <Key>, [Default]

で読み込み、

IniWrite, <Value>, <File>, <Section>, <Key>

で書き込みです。

AutoHotkeyでの設定の読み書きではSectionで区切り、 keyで値に名前を付けて保存します。

上の例だとこんな感じのファイルになります。

my_ahk.ini
1
2
3
4
5
[Section 1]
MyVal1Key=1
[Section 2]
MyVal2Key=Modified Text
MyVal1Key=5

セクション名は[]で囲まれ、各値は=keyとつながる様に書かれます。

セクションが違えば同じキーの名前を使えます。

IniReadでは指定したファイル、セクション、キーに該当する値が Outputに入ります。 ファイルがなかったり、キーがない場合にはDefaultの値が 入りますが、Defaultを指定しない場合、ERRORという文字列が入ります。

IniWriteでは書き込み先のフォルダが無いとエラーを出します。 なので上の例ではまずフォルダをチェックして作っています。 書き出しは指定したファイル、セクション、キーにValueを書き出します。

こんな感じでやってみると意外と簡単に出来ました。

Sponsored Links
Sponsored Links

« AutoHotkeyでのGUI操作 AutoHotkeyでToolTipを出す »