#7025
Yutaka Emura
キーマスター

kshiさんは書きました:
マクロファイルをテキストストリームで読み込んでevalで実行する自作マクロ
(ライブラリの「無限階層マクロメニュー」)で、#includeのようなスクリプト
指示子を利用したマクロを実行できないのは不便なので、レジストリを操作して
登録・実行しようと考えております。

当初、マクロ登録可能数の上限である1023番目に決め打ちで登録・実行しようと
目論みましたが、既に登録済みの番号+1でないと実行できないとわかりました
ので、以下のようなコードにしました。

function registAndRunMacro(macroFileName) {
//マクロをレジストリに登録して、実行する
//※ 外部マクロ中で変数が変わる可能性があるので、MacroItemNumberのように長い名前にすること。
//※ EventsとIconは操作しなくても特に問題ないらしい。
for (MacroItemNumber = 0; MacroItemNumber < 1023; MacroItemNumber++) {
if (editor.GetProfileString(eeRegMacros, "Macros", "Macro" + MacroItemNumber, "") == "") break;
}
editor.WriteProfileString(eeRegMacros, "Macros", "Macro" + MacroItemNumber, macroFileName);
// editor.WriteProfileInt( eeRegMacros, "Macros", "Events" + MacroItemNumber, 0 );
// editor.WriteProfileString( eeRegMacros, "Macros", "Icon" + MacroItemNumber, "" );
editor.ExecuteCommandByID( 9216 + MacroItemNumber);
editor.WriteProfileString( eeRegMacros, "Macros", "Macro" + MacroItemNumber, "" ); //登録抹消
}

(1) Macro0から順に走査して、未登録の最初の番号を得る
(2) マクロファイルを登録して実行する
(3) 登録したばかりの内容を削除する

【疑問】これで一応うまく行っているが、何か落とし穴がないか???

こんな裏技は動作保証の対象外だとは思いますが、自己責任で利用しますので、
お知恵を貸していただければ幸いです。

将来のバージョンでもこの方法が使えるという保証はできないのですが、これで問題なく動作するようでしたら、これでいいのではないでしょうか? あまりいい知恵じゃなくて申し訳ありません。