1 件の投稿を表示中 (合計 3 個)
  • 作成者
    投稿
  • #7023
    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) 登録したばかりの内容を削除する

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

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

    #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) 登録したばかりの内容を削除する

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

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

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

    #7030
    kshi
    参加者

    江村さん、ご回答ありがとうございます。

    editor.ExecuteCommandByIDの仕様が大きく変わらない限り大丈夫だろうと楽観し
    て利用したいと思います。

1 件の投稿を表示中 (合計 3 個)
  • このトピックに返信するにはログインしてください。