入門編 ~特殊なスリープと解除~

  • 概要

    hm.NETでは「特殊なスリープによって処理をブロックしつつ、
    何かの入力(マウス・キーボード)」を得ると解除する、という処理を行うことが出来ます。

    この処理は秀丸から提供されているものをそのまま提供しているにすぎず、
    原則的にはこのようなスリープを利用した処理は設計を間違っていることが大半であり、
    推奨されません。

  • 特殊なスリープと解除

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

    Hm.Edit.QueueStatus
    • C#側のソース

      MyTestForm.cs
      using System;
      using System.Windows.Forms;
      using Hidemaru;
      
      namespace HmTest
      {
          partial class HmTestForm
          {
              protected void MethodCreate()
              {
                  System.Diagnostics.Trace.WriteLine("フォーム生成時");
      
                  // 何かキーの入力があるのを待機してチェックする。
                  while(true)
                  {
                      System.Threading.Thread.Sleep(50);
                      if (Hm.Edit.QueueStatus)
                      {
                          System.Diagnostics.Trace.WriteLine("入力を得た");
                          break;
                      }
                  }
      
                  System.Diagnostics.Trace.WriteLine("フォーム生成時");
      
              }
      
              protected void MethodTick()
              {
                  System.Diagnostics.Trace.WriteLine("チック時");
              }
              protected void MethodDestroy()
              {
                  System.Diagnostics.Trace.WriteLine("フォームクローズ時");
              }
          }
      
      }
      
      
      
    • 秀丸マクロ側のソース

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

      実行すると、フォームの生成の途中(MethidCreate)で処理がSleepによってブロックされるため、
      入力待ち(該当の秀丸プロセスが処理を進めずに待機)のような状態となります。
      マウスの入力や、キーボードの入力により、「(Hm.Edit.QueueStatus」が真となり、
      処理が先へと進んでいくといったものとなります。

      このように「Hm.Edit.QueueStatus」は「Sleepのような処理を止めるものと併せて」使うこととなりますが、
      このような処理をすること自体あまり良いことではありませんので、
      この「Hm.Edit.QueueStatus」の利用は特殊な用途を除いては、避けることをお勧めします。