マクロイベントの「アイドル状態になった時」

  1. 以下の「テーマの自動変更」マクロを作りました。
    https://www.haijin-boys.com/wiki/テーマの自動変更

    このマクロで、テーマ状態の監視のためにマクロイベントを使用するのですが、今のところ「フォーカスを受け取った時」「フォーカスを失った時」あたりを使用しています。
    ただ、ウィンドウ放置の状態ではイベントが発生しないので、「アイドル状態になった時」を使用してみました。
    このイベントはMeryがアイドル状態になった時に発生する想定のようですが、実際には「マクロの実行が完了してアイドル状態になりイベント発生」のループで動作しているようです。
    このため、非常に高頻度でイベントが発生して、CPU負荷が無視できないかなと思えるくらいです。
    高頻度で発生するイベントは貴重なので、これはこれでもいいと思うのですが、もう少し頻度を下げるなどできないものでしょうか?
    いくつかのイベントで使用できる遅延時間の設定も、このイベントでは使用できない様子でした。

    わがままを言うようで申し訳ありませんが、もしよろしければご検討ください。

     |  pizz  |  返信
  2. マクロ制作、お疲れさまです。

    Windows のテーマを時間で切り替えるって、発想が面白いですね。

    実は Mery でも、ダークモード/ライトモードでテーマを自動切り替えできたら便利だなと思って、検討したことがありました。

    ただ、オプション画面の仕様上「ダーク/ライトの切り替え設定」と「テーマ設定」が同じダイアログに入っているので、それぞれのモードに別テーマを設定するための UI がどうしても思いつかなかったんです。

    もしこの 2 つが別ダイアログなら、

    • まずダーク/ライト切り替えを設定 → OK → 適用
    • 次にテーマを設定 → OK (今の外観モードに適用)

    という流れにできるんですけどね。(Notepad++ っぽい方式です)

    > 高頻度で発生するイベントは貴重なので、これはこれでもいいと思うのですが、もう少し頻度を下げるなどできないものでしょうか?

    アイドル時のイベントはアプリ内部の Idle イベントと連動していて、アプリ側が「処理に余裕ができたタイミング」で呼び出す仕組みになっています。

    • バックグラウンドで処理が詰まっていると Idle が発生しない
    • 逆にヒマだと連発する
    • つまり Delphi アプリの気まぐれで変動します…

    なので、何かを一定間隔で監視する用途には向いてないかもですね。

    やるとしたら、新たに「指定した間隔が経過した時」に発生するイベント (いわばタイマーイベント) を新設するほうが現実的かなと思います。

    0 ~ 4 秒の [遅延時間] の項目を使って、その範囲で繰り返し処理を行う感じですね。

    ただ、これは他のイベントも同じですが、[遅延時間] は全マクロで共通の設定なんですよね。

    なので、「このマクロは 1 秒ごと、あっちのマクロは 3 秒ごと」といった感じで マクロごとに間隔をずらすといった高度な用途には使えません。

    もうひとつ考えられる案としては、[編集モードが変更された時] を利用する方法です。

    このイベントは名前のとおり編集モード変更時に呼ばれるのですが、それ以外にも、

    • オプション画面で OK を押して設定が適用されたとき
    • フォント変更時
    • [色の反転] を切り替えたとき

    など、いくつかの設定変更でも呼び出されるようになっています。

    ここに「Windows 側の設定が変わったとき」も加えることで、テーマ変更検出に利用できるかもしれません。

    もちろん、最終的には Mery 側で「ダーク/ライトごとにテーマを設定できる」仕組みを用意できるのが一番良いんですけどね…

     |  Kuro  |  返信
  3. >> Kuro様

    ご回答ありがとうございます。

    > ただ、オプション画面の仕様上「ダーク/ライトの切り替え設定」と「テーマ設定」が同じダイアログに入っているので、それぞれのモードに別テーマを設定するための UI がどうしても思いつかなかったんです。

    うーん、やるとしたら、「表示」カテゴリをもう一つ増やして「表示(ダーク)」にするとかですね。
    ただ、なんか冗長になってしまう感は否めません。

    > やるとしたら、新たに「指定した間隔が経過した時」に発生するイベント (いわばタイマーイベント) を新設するほうが現実的かなと思います。
    ...
    > ただ、これは他のイベントも同じですが、[遅延時間] は全マクロで共通の設定なんですよね。

    これはすごくよさそうな案なんですが、個別に調整できないとつらいところですね。

    > もうひとつ考えられる案としては、[編集モードが変更された時] を利用する方法です。

    これについては、このマクロ専用に対応いただくようなイメージになってしまって、あまり気が進みません。

    > もちろん、最終的には Mery 側で「ダーク/ライトごとにテーマを設定できる」仕組みを用意できるのが一番良いんですけどね…

    よろしければ、ここのご検討は引き続きお願いします。

    現状でも、ウィンドウをちょっとクリックすれば、テーマは反映されますので、まぁまぁこれでもいいのかなくらいには使えています。
    気長にご検討ください。

    よろしくお願いいたします。

     |  pizz  |  返信
スポンサーリンク