更新や具体的操作があるかのチェック~ (秀丸エディタ 9.12以降)

概要

監視・常駐型のプログラムを作る際に、「秀丸上で何も更新や具体的な操作がないならば、何もする必要がない」といった
プログラムを作ることは十分ありえるシチュエーションです。

このような目的のため、Hm.Edit.UpdateCount が利用できます。
これは秀丸マクロ変数の「updatecount」相当のものとなります。

更新や具体的操作があるかの判断材料となる updatecount 相当の値を取得する

マクロ中でもマクロ中以外でも、常時取得することが出来ます。

int Hm.Edit.UpdateCount
  • C#側のソース

    MyTestForm.cs
    using System;
    using System.IO;
    using System.Runtime.InteropServices;
    using System.Text;
    using System.Threading;
    using System.Threading.Tasks;
    using HmNetCOM;
    
    namespace NET4COMServer
    {
        [Guid("BD55F2A6-9ED0-4F4F-9D37-E6B84BE63272")]
        public class NET4COMServer
        {
            // 静的コンストラクタ(static付きコンストラクタ)でコンソール表示を読んでおけば良い。
            static NET4COMServer()
            {
            }
    
            // 非同期のメソッド
            static string HeavyMethod()
            {
                Thread.Sleep(1000);
    
                try
                {
                    // このプロパティは秀丸9.12以上なので存在しないことが充分考えられる
                    // アップデート値
                    int updatecount = Hm.Edit.UpdateCount;
    
                    Hm.OutputPane.Output(updatecount.ToString() + "\r\n");
                }
                catch (Exception e)
                {
                    Hm.OutputPane.Output(e.Message + "\r\n");
                }
                return "非同期関数";
            }
    
            // 秀丸から呼び出すCOMのメソッド。COM呼び出しだとstaticを付けては駄目。
            public string CalledFuncFromHidemaruMacro()
            {
                Task<string> task = Task.Run(() => {
                    return HeavyMethod();
                });
    
                // awaitやTaskのResult待ちしないので、この関数自体は一瞬で抜けていく。
                return "同期関数";
            }
        }
    }
    
  • 秀丸マクロ側のソース

    テキストを編集してみたり、メニュー上の操作をしてみたり、
    操作をやめてマウスだけ動かしてみたりして、
    updatecount がどのように更新されていくのか確認してみてください。