マクロイベントの「アイドル状態になった時」
-
以下の「テーマの自動変更」マクロを作りました。
https://www.haijin-boys.com/wiki/テーマの自動変更このマクロで、テーマ状態の監視のためにマクロイベントを使用するのですが、今のところ「フォーカスを受け取った時」「フォーカスを失った時」あたりを使用しています。
ただ、ウィンドウ放置の状態ではイベントが発生しないので、「アイドル状態になった時」を使用してみました。
このイベントはMeryがアイドル状態になった時に発生する想定のようですが、実際には「マクロの実行が完了してアイドル状態になりイベント発生」のループで動作しているようです。
このため、非常に高頻度でイベントが発生して、CPU負荷が無視できないかなと思えるくらいです。
高頻度で発生するイベントは貴重なので、これはこれでもいいと思うのですが、もう少し頻度を下げるなどできないものでしょうか?
いくつかのイベントで使用できる遅延時間の設定も、このイベントでは使用できない様子でした。わがままを言うようで申し訳ありませんが、もしよろしければご検討ください。
| pizz | 返信 -
マクロ制作、お疲れさまです。
Windows のテーマを時間で切り替えるって、発想が面白いですね。
実は Mery でも、ダークモード/ライトモードでテーマを自動切り替えできたら便利だなと思って、検討したことがありました。
ただ、オプション画面の仕様上「ダーク/ライトの切り替え設定」と「テーマ設定」が同じダイアログに入っているので、それぞれのモードに別テーマを設定するための UI がどうしても思いつかなかったんです。
もしこの 2 つが別ダイアログなら、
- まずダーク/ライト切り替えを設定 → OK → 適用
- 次にテーマを設定 → OK (今の外観モードに適用)
という流れにできるんですけどね。(Notepad++ っぽい方式です)
> 高頻度で発生するイベントは貴重なので、これはこれでもいいと思うのですが、もう少し頻度を下げるなどできないものでしょうか?
アイドル時のイベントはアプリ内部の Idle イベントと連動していて、アプリ側が「処理に余裕ができたタイミング」で呼び出す仕組みになっています。
- バックグラウンドで処理が詰まっていると Idle が発生しない
- 逆にヒマだと連発する
- つまり Delphi アプリの気まぐれで変動します…
なので、何かを一定間隔で監視する用途には向いてないかもですね。
やるとしたら、新たに「指定した間隔が経過した時」に発生するイベント (いわばタイマーイベント) を新設するほうが現実的かなと思います。
0 ~ 4 秒の [遅延時間] の項目を使って、その範囲で繰り返し処理を行う感じですね。
ただ、これは他のイベントも同じですが、[遅延時間] は全マクロで共通の設定なんですよね。
なので、「このマクロは 1 秒ごと、あっちのマクロは 3 秒ごと」といった感じで マクロごとに間隔をずらすといった高度な用途には使えません。
もうひとつ考えられる案としては、[編集モードが変更された時] を利用する方法です。
このイベントは名前のとおり編集モード変更時に呼ばれるのですが、それ以外にも、
- オプション画面で OK を押して設定が適用されたとき
- フォント変更時
- [色の反転] を切り替えたとき
など、いくつかの設定変更でも呼び出されるようになっています。
ここに「Windows 側の設定が変わったとき」も加えることで、テーマ変更検出に利用できるかもしれません。
もちろん、最終的には Mery 側で「ダーク/ライトごとにテーマを設定できる」仕組みを用意できるのが一番良いんですけどね…
| Kuro | 返信 -
>> Kuro様
ご回答ありがとうございます。
> ただ、オプション画面の仕様上「ダーク/ライトの切り替え設定」と「テーマ設定」が同じダイアログに入っているので、それぞれのモードに別テーマを設定するための UI がどうしても思いつかなかったんです。
うーん、やるとしたら、「表示」カテゴリをもう一つ増やして「表示(ダーク)」にするとかですね。
ただ、なんか冗長になってしまう感は否めません。> やるとしたら、新たに「指定した間隔が経過した時」に発生するイベント (いわばタイマーイベント) を新設するほうが現実的かなと思います。
...
> ただ、これは他のイベントも同じですが、[遅延時間] は全マクロで共通の設定なんですよね。これはすごくよさそうな案なんですが、個別に調整できないとつらいところですね。
> もうひとつ考えられる案としては、[編集モードが変更された時] を利用する方法です。
これについては、このマクロ専用に対応いただくようなイメージになってしまって、あまり気が進みません。
> もちろん、最終的には Mery 側で「ダーク/ライトごとにテーマを設定できる」仕組みを用意できるのが一番良いんですけどね…
よろしければ、ここのご検討は引き続きお願いします。
現状でも、ウィンドウをちょっとクリックすれば、テーマは反映されますので、まぁまぁこれでもいいのかなくらいには使えています。
気長にご検討ください。よろしくお願いいたします。
| pizz | 返信