続・Notepad++がレジストリに書き込みを行なうタイミング

暫く使っていないうちに、Notepad++ EUC-JP対応版のバージョンが上がっていたので、久しぶりに使ってみることにした。

ということでv5.4.5-6 euc-jpにv5.0.3-3 euc-jpの時の設定を移植したのだけど、正直めんどい。設定のXMLファイルを一々見比べてマージしているのだけど、何しろ設定を色々と弄くっているので変更点が無茶苦茶多く、diffを見比べるのも一苦労な有様。

何かよい方法はないだろうか?

ところでv5.4.5-6 euc-jpに付属のソースを眺めてみた所、レジストリへの書き込みが発生するタイミングが変わったようだ。

v5.0.3-3 euc-jpの頃は、id:eel3:20080927:1229751665 で書いた通り。

v5.4.5-6 euc-jpでは、多分こんな感じ*1

  • 「設定→環境設定→ファイルの関連付け」で拡張子を選択し、「登録済み形式」へ登録しようとボタンを押した瞬間に、
    1. HKEY_CLASSES_ROOT直下に「Notepad++_file」というキーが作成され、その中にキーや値が設定される。
    2. HKEY_CLASSES_ROOT直下に登録しようとした拡張子名でキーが作成され、デフォルトの値に「Notepad++_file」が設定される。既にその拡張子名のキーが存在し、且つキーのデフォルトの値が設定済みの場合、その値を「Notepad++_backup」という名前でコピーしてからデフォルトの値が上書きされる。

以前は環境設定ダイアログを開いた瞬間にキーが作成されたが、そうではなくなった。ファイルの関連付け設定を弄らない限り、レジストリへの書き込みは発生しないようだ。

ちなみにソースからレジストリにアクセスしている部分を探した方法は、

D:\npp.5.4.5-6.src>grep -nr RegCreate .
バイナリー・ファイル./PowerEditor/bin/npp.pdbは一致しました
バイナリー・ファイル./PowerEditor/installer/externalTools/md5summer.exeは一致しました
./PowerEditor/src/MISC/RegExt/regExtDlg.cpp:260:        nRet = ::RegCreateKeyEx(HKEY_CLASSES_ROOT,
./PowerEditor/src/MISC/RegExt/regExtDlg.cpp:328:        nRet = ::RegCreateKeyEx(
./PowerEditor/src/MISC/RegExt/regExtDlg.cpp:363:        nRet = ::RegCreateKeyEx(
./PowerEditor/src/tools/nppCM/nppcm.cpp:184:    lResult = RegCreateKeyEx(ClsidEntries[i].hRootKey, szSubKey, 0, NULL, REG_OPTION_NON_VOLATILE, KEY_WRITE, NULL, &hKey, &dwDisp);

D:\npp.5.4.5-6.src>

前回と全く同じ。

nppcm.cppというソースも引っかかったが、これはnppcm.dllというシェル拡張用コンポーネント*2のソース。nppcm.dll自体は、v5.4.5-6 euc-jpのバイナリには含まれていないようだ。

*1:実際に動作させて挙動を追った訳ではないので、もしかしたら違うかもしれない。

*2:ドキュメントによると、右クリックメニューに「Edit with Notepad++」が追加されるらしい。