[ 新規に投稿する ]

マクロmenuコマンドとscreen saverNo.41633
chikachika さん 25/01/27 22:08 [ コメントを投稿する ]
  マクロで、menuを出したままの状態でscreen saverが起動すると、その時点でescapeキーが押されたような動作が起きてしまいます。これを何とか抑止できないでしょうか。

希望としては、マクロmessageコマンドと同じように、screen saverの起動や、復帰にかかわらずに、つまりそれらとは無関係に動作してくれることなのですが。
[ ]
RE:41633 マクロmenuコマンドとscreen saverNo.41634
秀丸担当 さん 25/01/28 11:55 [ コメントを投稿する ]
  ご指摘ありがとうございます。
秀丸エディタのメニューは、メニューバーは独自ですが、メニューそのものは一般的なWindowsのメニューと同様になっています。
すみませんが、この振る舞いを変えるのは難しいです。

参考まので情報としてですが、スクリーンセーバーを直接起動してみました。
なぜかスクリーンセーバーが抑止されるPCとされないPCがあって、どうやったら変えられるのか不明で、抑止されているPCで試そうとしたためです。
スクリーンセーバーはc:\windows\system32の拡張子.scrのexeファイルで、起動オプション/sで起動できるようです。(例:C:\Windows\Sysnative\Ribbons.scr /sを自前で時間差で)
この場合、幾つかのアプリでキー入力が続行できてしまう状況になりました。(つまりメニューが出たままにもなる)
裏でキー入力続行できてしまうのはよくないので、メニューが消えるとしたら、そちらのほうが好都合という気がします。
[ ]
RE:41634 マクロmenuコマンドとscreen saverNo.41637
chikachika さん 25/01/28 14:41 [ コメントを投稿する ]
  早速のご回答ありがとうございました。

menuコマンドがescapeキー打鍵と同様のresult=0で終了してきたとき、
messageコマンドで、意図して打鍵したかどうか聞いて、
意図してないと返答があれば、
menuコマンドを再実行するようにして、解決しました。

15分くらいかかる仕事をソフトがした最後にmenuを選ばせるようなソフトを作ったので、
私が途中離席して別作業の後にPCに戻ってきた際に、
「あれっキー押してなかったのに」と気付きました。

ヘルプなどの文書のmenuコマンドの説明にスクリーンセーバとの関係を書いておいて頂く契機になれば嬉しいです。
[ ]
RE:41637 マクロmenuコマンドとscreen saverNo.41638
秀丸担当 さん 25/01/29 09:10 [ コメントを投稿する ]
  そういうマクロだったのですね。
そういった事例があり、menu文のところにも書いたほうがよさそうということで参考にさせていただきます。
[ ]
RE:41638 マクロmenuコマンドとscreen saverNo.41639
(-L-) さん 25/01/31 15:31 [ コメントを投稿する ]
>そういうマクロだったのですね。

すでに解決とのことですが、今回の件に対するアプローチのひとつとして
マクロ実行中でmenuがスクリーンセーバーが原因でキャンセルされるのが困るのであれば、そもそも、その期間はスクリーンセーバーが働かないようにすれば良いとも思います。

たとえば、「マウスふるふる」をマクロで起動させてから長時間処理を始めるとか。

その観点でいくと、Win32APIのSetThreadExecutionStateを叩くとかもあろうかと思いますが、秀丸マクロでWin32APIは直接叩けるのでしょうか?
(ちょっと探してみたけどわかりませんでした)

または、

今の秀丸マクロの命令の範囲でできる対策で、スクリーンセーバーが働かないようにする技があるかどうかなど。
[ ]
RE:41639 マクロmenuコマンドとscreen saverNo.41640
秀丸担当 さん 25/01/31 16:32 [ コメントを投稿する ]
  SetThreadExecutionStateというAPIがあるのですね。
Win32APIの呼び出しは、dllfuncを使うと、64bit版で最初の4つのパラメータまでとか、特定の条件ではできてしまいます。
しかし呼び出し規約が違うので、おすすめはできないです。
32bit版は危ないです。
マクロでできる通常の文などではスクリーンセーバーを働かさないようにする方法は用意されていません。
そういうことが予想される場合は、message文で待つようにするといった方法が簡単でいいと思います。
[ ]

[ 新規に投稿する ]