入門編 ~秀丸マクロ上の変数の値を読み取る・書き換える~

  • 概要

    hm.NETでは秀丸マクロで定義されている変数(秀丸マクロからあらかじめ提供されているもの、
    ユーザーが独自に定義したもののどちらでも)を取得、 値を書き換えることが出来ます。
    (※秀丸があらかじめ提供している読み取り専用のシンボルの値は書き換えることが出来ません)

  • 秀丸マクロ上の変数の値を読み取る・書き換える

    マクロ実行中のみ、読み取り・書き換え可能

    Hm.Macro.Var["変数名"]
    • C#側のソース

      MyTestForm.cs
      using System;
      using System.Windows.Forms;
      using Hidemaru;
      
      namespace HmTest
      {
          partial class HmTestForm
          {
              protected void MethodCreate()
              {
                  System.Diagnostics.Trace.WriteLine("フォーム生成時");
      
                  var fn1 = Hm.Edit.FilePath;
                  System.Diagnostics.Trace.WriteLine(fn1);
                  var fn2 = Hm.Macro.Var["filename2"];
                  System.Diagnostics.Trace.WriteLine(fn2);
                  Hm.Macro.Var["$bbdd"] = "文字列変数への代入";
                  Hm.Macro.Var["#ccef"] = -33;
      
                  // 秀丸マクロの数値の変数を取得する際は、以下のように一度(dynamic)を挟むこと
                  var column = (int)(dynamic)Hm.Macro.Var["column"];
      
                  // 上と同じようにdynamicで、こちらはユーザー定義の変数を取得
                  var cccc = (int)(dynamic)Hm.Macro.Var["#cccc"];
              }
              protected void MethodTick()
              {
                  System.Diagnostics.Trace.WriteLine("チック時");
              }
              protected void MethodDestroy()
              {
                  System.Diagnostics.Trace.WriteLine("フォームクローズ時");
              }
          }
      
      }
      
      

      秀丸マクロ上の変数取得において、「数値変数」をC#側から取得する際には注意を要します。
      秀丸エディタは32bit版と64bit版が存在するので、どちらの版でも 共通のC#ソースにするためには、
      dynamicに一度キャストして型情報を問わないようにしておく必要があります。
      直接intでキャストすると、秀丸エディタ64bit版では、キャスト不可能な例外が発生してしまいます。

    • 秀丸マクロ側のソース

      HmNETTest.macなどと適当に名前を付ける
      debuginfo 1;
      debuginfo "macro start\n";
      
      #cccc = -1000;
      
      #HMNET = loaddll( hidemarudir + @"\hm.NET.dll" );
      #r = dllfuncw( #HMNET, "SetDetachMethod", currentmacrodirectory + @"\HmTest.dll", "HmTest.HmTestClass", "OnDetathMethod" );
      #r = dllfuncw( #HMNET, "CallMethod", currentmacrodirectory + @"\HmTest.dll", "HmTest.HmTestClass", "CreateForm" );
      
      message $bbdd;
      message str(#ccef);
      
      debuginfo "macro end\n";
      
      
      

      一度マクロを実行し、「デバッグモニター」にどのように順次表示されるか確認しましょう。

      C#側から変数へと設定した値を、秀丸マクロ(*.mac)側から、ダイアログで表示しています。