動機
年賀状作成シーズンがやってきた。我が家では長らく筆ぐるめ14を利用してきたのだが、流石に古いので3年くらい前に筆ぐるめ23に買い替えた。
過去に作成した年賀状データを見つつ毎年新しく作ったり部品をコピペしたりしているのだが、過去のデータが見えなくなってしまった。データ自体はファイルシステム上に存在しているにもかかわらずだ。
この記事は筆ぐるめがどのようにディレクトリとファイルを認識しているかをたどる過程でわかったことを未来の自分のために書き残す備忘録である。
多分他のバージョンの筆ぐるめについてもこの記事の内容が適用できるものと思っているが、保証はしない。
なおOSはWindows10 Home 1803を利用している。Windows7とかだと微妙に違っている可能性はある。
グループとは
筆ぐるめ23を起動して表面でも裏面でもいいが左にあるメニューを右クリックすると
新規グループ作成
新規サブグループ作成
という選択肢が出てくる。このグループのことだ。
左側のメニューは並び替えられる
どういうことかというと、上の図で言えば例えばみんなのレイアウト→マイレイアウトという順番で並んでいるのを逆にしたりできるということだ。マウスのドラッグで変えられる。
メニューの内容が記述されたファイルはどこか
メニューの中身を入れ替えたり追加/削除できるということはどこかでその情報を管理しているはずである。一体どこにあるというのか。
ソフトウェアの起動に管理者権限を要求されないことから、一般的な作法に従えば%USERPROFILE%\AppData
とかC:\ProgramData
を使っているだろう。
案の定探してみると
%USERPROFILE%\AppData\Local\Fujisoft\Fgw\23
C:\ProgramData\Fujisoft\Fgw\23
にあった。
さて、まあ画像の更新日時からも自明だが、C:\ProgramData\Fujisoft\Fgw\23
のほうはただのカカシだ。つまり我々が見るべきは%USERPROFILE%\AppData\Local\Fujisoft\Fgw\23
だということだ。
さていくつかファイルがある。拡張子が.ginfo
となっている。しかし恐れることはない。ただのテキストファイルだった。
次に拡張子が.ginfo
のファイルだが、S
から始まるものとU
から始まるものがある。S
から始まるものが何なのか、さっぱり分からないが、やはり更新日時から自明なように関係がない。つまり我々が見るべきはU
から始まるものだということだ。
UAddres.ginfo UAlbum.ginfo UBackgr.ginfo UExampl.ginfo UExampl2.ginfo UIllust.ginfo ULayout.ginfo
まあ大体名前で何に対応しているかわかる。
.ginfo
ファイルのフォーマット
これ自体は.ini
ファイルみたいなものだが、なぜか値がcsvになっている。素直にjson使うべきでは?。
[GroupAttributesBackgr] Count=11 Group1="みんなの背景","%COMMON_BACKGROUNDS%",5021,1,"","C",,"0" Group2="オンラインダウンロード","%SYSTEM_BACKGROUNDS%\\ContentDownload",5042, 1,"", "C",,"0" Group3="年賀状","%SYSTEM_BACKGROUNDS%\\SGroup00",5001,1,"","C",,"1" Group4="はがき縦","%SYSTEM_BACKGROUNDS%\\SGroup00\\00_01",5103,1,"%SYSTEM_BACKGROUNDS%\\SGroup00","C",,"1" Group5="はがき横","%SYSTEM_BACKGROUNDS%\\SGroup00\\00_02",5103,1,"%SYSTEM_BACKGROUNDS%\\SGroup00","C",,"1" Group6="シンプル","%SYSTEM_BACKGROUNDS%\\SGroup00\\00_03",5103,1,"%SYSTEM_BACKGROUNDS%\\SGroup00","C",,"1" Group7="和風","%SYSTEM_BACKGROUNDS%\\SGroup01",5003,1,"","C",,"1" Group8="はがき縦","%SYSTEM_BACKGROUNDS%\\SGroup01\\01_01",5103,1,"%SYSTEM_BACKGROUNDS%\\SGroup01","C",,"1" Group9="はがき横","%SYSTEM_BACKGROUNDS%\\SGroup01\\01_02",5103,1,"%SYSTEM_BACKGROUNDS%\\SGroup01","C",,"1" Group10="喪中欠礼","%SYSTEM_BACKGROUNDS%\\SGroup03",5037,1,"","C",,"1" Group11="寒中見舞い","%SYSTEM_BACKGROUNDS%\\SGroup04",5034,1,"","C",,"1"
名前はCount
というのとGroupN
というのがある。ただしN
は1から始まる連番だ。
このN
の番号こそ、左のメニューの並び順の正体である。
で、GroupN
の値を見ていく。これは明らかにcsvなのでそれぞれの意味を探ってみた。そのためにわかりやすい値をいくつか拾ってきた。
"みんなの\nレイアウト","%COMMON_LAYOUTS%",5021,1,"","C",,"0" "マイ レイアウト","%USER_LAYOUTS%\\Group000",5022,1,"","D",,"0" "test1","%USER_LAYOUTS%\\Group000\\Group009",5103,0,"%USER_LAYOUTS%\\Group000","D",,"" "リムーバブル\n(I:)","\\",8422,4,"","I",4,"" "CD-DVD\n(M:)","\\",8421,1,"","M",3,""
とはいえcsvっていうのは読みにくいのでそれぞれの意味を解説がてらjsonっぽく書き換えてみよう。
[ { "type": "string", "note": "項目の名前、改行は\nを使用", "isOptional": false, "example": [ "みんなの\nレイアウト", "マイ レイアウト" ] }, { "type": "string", "note": "項目内のデータが存在しているパス。ただしプログラム内で定義されている謎の変数を含む。ドライブレターを含まない", "isOptional": false, "example": [ "%COMMON_LAYOUTS%", "%USER_LAYOUTS%\\Group000", "\\" ] }, { "type": "integer", "note": "グループの種類番号。おそらくシングルクリックしたときの挙動に関わる", "knownValue": [ { "value": 5103, "note": "何らダイアログを必要とせず保存されているレイアウトファイル(.fglと.fgl.fgt)を呼び出すもの" }, { "value": 5042, "note": "クラウドサービスに接続するもの" } ] "isOptional": false, "example": [ 5001, 5019, 5021, 5022, 5023, 5034, 5036, 5037, 5042, 5044, 5103, 8421, 8422 ] }, { "type": "integer", "note": "グループ設定変更禁止フラグ", "knownValue": [ {"value": 0, "note": "変更可能"}, {"value": 1, "note": "変更不能"} ], "isOptional": false }, { "type": "string", "note": "親カテゴリのデータが存在しているpath", "isOptional": true, "example": "%USER_LAYOUTS%\\Group000" }, { "type": "string", "note": "項目内のデータが存在しているパスのドライブレター", "isOptional": false, "example": [ "C", "D", "M" ] }, { "type": "integer", "note": "device type", "knownValue": [ {"value": 3, "note": "CD/DVD/BD"}, {"value": 4, "note": "removable media"} ], "isOptional": true }, { "type": "string", "note": "サブグループ作成禁止フラグ", "knownValue": [ {"value": "0", "note": "作成可能"}, {"value": "1", "note": "作成不能"}, {"value": "", "note": "自身がサブグループ"}, ], "isOptional": false } ]
推測だがこんな感じだろうか。グループの種類番号ってのはほんとによくわかんないが、とりあえず5103
だけが大事な感じ。
プログラム内で定義されている謎の変数
先程
項目内のデータが存在しているパス。ただしプログラム内で定義されている謎の変数を含む。
と解説した謎の変数について見ていく。
Process Explorerで筆ぐるめ23(Fgw.exe
)を覗くと
それらしい文字列が見えてくる。USER_LAYOUTS
ってさっきあったよな。多分このへん全部有効な変数名なんじゃなかろうか。
ちなみにUSER_LAYOUTS
は多分ライブラリのドキュメントの中の筆ぐるめ\ULayout
を指していると思う。
ライブラリのドキュメントのパスはGUI以外にも
reg query "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" /v "Personal"
で分かる。