- 作成者投稿
- 2009年1月29日 12:55 am #7023kshi参加者
マクロファイルをテキストストリームで読み込んで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) 登録したばかりの内容を削除する【疑問】これで一応うまく行っているが、何か落とし穴がないか???
こんな裏技は動作保証の対象外だとは思いますが、自己責任で利用しますので、
お知恵を貸していただければ幸いです。2009年1月29日 10:41 pm #7025Yutaka 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) 登録したばかりの内容を削除する【疑問】これで一応うまく行っているが、何か落とし穴がないか???
こんな裏技は動作保証の対象外だとは思いますが、自己責任で利用しますので、
お知恵を貸していただければ幸いです。将来のバージョンでもこの方法が使えるという保証はできないのですが、これで問題なく動作するようでしたら、これでいいのではないでしょうか? あまりいい知恵じゃなくて申し訳ありません。
2009年1月30日 3:20 am #7030kshi参加者江村さん、ご回答ありがとうございます。
editor.ExecuteCommandByIDの仕様が大きく変わらない限り大丈夫だろうと楽観し
て利用したいと思います。 - 作成者投稿
- このトピックに返信するにはログインしてください。