day8: 設定ファイルの読み込み

さて、「あるソフトのこの領域を操作したら、このキーを送る」という設定を読み込むにはどうしたらよいか。最初はYAMLあたりが書きやすくていいかな、などと思っていたのだが、調べてみるとよさそうなライブラリがない。というかパーサーが大きく私の実力では簡単に組み込めなさそうなことが分かった。

それに比べて伝統的なiniファイルは.NET Frameworkの機能には含まれていないものの、Win32 APIの呼び出しにより簡単に実装できることが分かった。

.NET TIPS INIファイルを読み書きするには?

特にセクション、キー=値という構成は、作ろうとしているソフトにばっちりマッチする。例えば、次のような構成だ。

[Common] ; 全体の設定
MinClickLength=0
MaxClickLength=8

[RightArea1] ; 個別設定1
Top=0
Bottom=100%
Left=50%
Right=100%
TopMargin=50px
RightMargin=20px
Action=LEFTSWIPE
Key=LEFT
Process=viewer.exe

Configというクラスを作り、インスタンスを作ると同時に設定ファイルを読み込むようにした。コードは次のような感じ。

public class Config
{
  private string iniFileName;
  public string minClickLength;
  
  private string GetValue(string appName, string keyName, string defaultValue)
  {
    StringBuilder sb = new StringBuilder(1024);
    GetPrivateProfileString(appName, keyName, defaultValue, sb, (uint)sb.Capacity, iniFileName);
    return sb.ToString();
  }
  iniFileName = AppDomain.CurrentDomain.BaseDirectory + "TouchToKey.ini";
  minClickLength = GetValue("Common", "MinClickLength", "0");

GetPrivateProfileStringはファイルをオープンしなくてもiniファイルから目的の値を読み込んでくれるのですごく楽。GetSections()とGetValue()という2つのごく短いラッパーを定義するだけで、シンプルな設定ファイルの読み込み機能を実装できた。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です