ぺんちゃん日記

食と歴史と IT と。 Web の旅人ぺんじろうが好奇心赴くままに彷徨います 。

【AutoHotkey】ユーザー個別の設定を ini ファイルで管理する。

f:id:yasushiito:20190403184928p:plain
先日はユーザー個別の設定を環境ファイルで管理する方法を試しました。
本当に小さいプログラムならこれでも良いのですが、設定項目が増えると環境変数を管理するコストが上がってきます。
そこで設定を ini ファイルで管理する方法を前回調べました。
今回はそれを試すために最小限のスクリプトを作ってみたいと思います。

仕様は以下の通り。

  • 起動するときに ini ファイルから設定を読み取り、入力ボックスの初期値として表示します。
  • OK ボタンをクリックすれば入力ボックスの内容を書き換える。

これだけです。

まずは画面を作るコマンドの調査です。

ahkwiki.net

とんでもないページを開いてしまった。
こんなに複雑なの?

どうやらAutoHotkeyguiコマンドが 画面関係の処理を全て引き受けているようです。

落ち着いて読みますと第1パラメータがコマンドになっていて、コマンドごとに挙動が変わるようです。
基本的なコマンドがaddで部品を追加、showで画面を表示、submitで画面で入力された内容を変数に取り込みます。
addコマンドでは入力ボックス、リストボックス、チェックボックス、ボタンなどを画面に貼り付けることができます。

まあとりあえず体を動かしてみます。

#Persistent
;前回の設定を読み込む。
  IniRead, hatenaid, conf.ini, user, hatenaid, yourid
;入力ダイアログを作成する。
  Gui, add, text, ,入力してみて
  Gui, add, edit, vhatenaid w200, %hatenaid%
  Gui, Add, Button, W100 X25 Default gsubmit, OK
  Gui, Add, Button, W100 X+10, Cancel
;ダイアログを表示する。
  Gui, Show,, 設定のサンプル
  Return

;ダイアログの OK ボタンを押された時の処理。
submit:
  Gui, Submit
;入力された値を保存する。
  IniWrite, %hatenaid%, conf.ini, user, hatenaid
  Return
;ダイアログのキャンセルボタン押された時の処理。
ButtonCancel:
  Gui, Destroy
  Return

gui addコマンドの特殊事情がいくつかあります。

第2パラメータ以降は各種パラメータをカンマではなくスペースで区切ることがあります。
次の例ではボタンを作成していますが、第3パラメータで表示する X 座標と幅、そしてクリックしたときの処理のあるラベルの4種類を一つのパラメータで渡しています。

  Gui, Add, Button, W100 X25 Default gsubmit, OK

それぞれの項目はw200などのように項目と数値をつなげて書きます。
項目の種類と名前はコントロールごとに違います。
gの後ろはサブルーチンのラベル名です。
クリックしたときはgを取り除いた文字列をラベル名と認識して処理を起動します。
今回はgsubmitなのでラベルsubmitを呼び出します。
最後のパラメータの OK をボタンの正面に表示します。

次はキャンセルボタンです。

  Gui, Add, Button, W100 X+10, Cancel

X 軸を相対距離で指定しています。
x+10のようにプラスをつけると、直前に追加したコントロールの右端からの相対座標位置にコントロールを追加します。
このサンプルでは OK ボタンの後ろに記述しているので、 OK ボタンより10ピクセル右に作成されるはずです。
もちろん Y 座標でも使えて、マイナスも指定できます。
ボタンをクリックしたときのサブルーチンのラベル名が指定されていませんが、省略することも可能です。
省略した場合は コントロール名+ボタン表面のメッセージがラベル名となります。
今回の場合はコントロール名がButtonでボタン表面のメッセージがCancelなのでButtonCancelとなります。
ボタン表面のメッセージにスペースが含まれる場合、スペース以降は無視されるようです。
日本語を突っ込んだらどうなるんだろう?
日本人にはちょっと使いにくいかもしれませんね。

次はエディットボックスです。

  Gui, add, edit, vhatenaid w200, %hatenaid%

これもボタンをクリックしたときのサブルーチン呼び出しG+ラベルと同じように、vで始まる文字列はvを取り除いた文字列を変数名として使います。
今回の例ではvhatenaid なので入力された文字は変数hatenaidに入ります。
最後のパラメータは初期入力値なのでIni ファイルから読み込めない時に補充されます。
注意点としてはgui,submitするまで変数には反映されないということです。
OK ボタンをクリックしたときのサブルーチンでサブミットして変数を更新し、 ini ファイルに保存しています。

;ダイアログの OK ボタンを押された時の処理。
submit:
  Gui, Submit
;入力された値を保存する。
  IniWrite, %hatenaid%, conf.ini, user, hatenaid
  Return

shoeコマンドは画面を作成し終えてから使います。
オプションからウィンドウタイトルを設定できます。
この記事では時々ダイアログと書いていますが表示されるのはウインドウです。
最小化ボタンがありますし、裏のウィンドウにフォーカスを移すこともできます。

  Gui, Show,, 設定のサンプル

Gui コマンドは強力ですが仕様が複雑で記述法も独特でしたね。
当分の間はdocumentが手放せなさそうです。