[ 新規に投稿する ]

マクロで起動した常駐アプリの終了方法No.40295
(-L-) さん 23/02/03 23:50 [ コメントを投稿する ]
マクロで、コマンドを実行します。
そのコマンドは常駐タイプです。
編集中のファイルをセーブすると、その常駐アプリがファイル更新を検知しリアルタイムプレビューを行う(画面更新)するものです。
そのため、マクロで常駐コマンドを実行した後、リアルタイムプレビューで編集結果を確認しながら、幾度の編集、幾度の上書き保存を繰り返します。

完成しました。

ここで、秀丸エディタを終了させようとすると、アウトプット枠処理中のためウィンドウを閉じることはできません。
アウトプット枠をクリックし、プログラム実行中を中断しますか。で中断させてからでないと終わらせることができません。

マクロの自動起動の、ファイルを閉じる直前、でも、完成した編集ファイルを閉じれば動きますが、秀丸エディタ本体を直接終了させようとすると動きません。

秀丸エディタをALT+F4などで直接終了させたら、マクロで実行していた常駐ファイルを強制終了(プログラム実行中を中断)して終わらせられるのが理想です。なにかスマートなやり方はありますでしょうか。

ちなみに、この常駐アプリは、ctrl+cか、taskkillで強制終了させないと終わらないタイプのものです。

[ ]
RE:40295 マクロで起動した常駐アプリの終了方法No.40302
秀丸担当 さん 23/02/06 11:08 [ コメントを投稿する ]
  プログラム実行でアウトプット枠に出力中となるということは、おそらくrunex文が非同期で、標準出力をアウトプット枠に指定されているということかと思います。
例えば以下のような感じかと思います。

runex @"cmd.exe /c copy con c:\test\test.txt && more c:\test\test.txt" //Ctrl+Cで終わります
    , 0     //sync   0:async, 1:sync
    , 0, "" //stdin  0:none, 1:auto, 2:<file, 3:(reserved),
            //       4:current content, 5:selection
    , 8, "" //stdout 0:none, 1:auto, 2:>file 3:>>file, 4:new window,
            //       5:insert, 6:replace, 7:>output pane, 8:>>output pane
    , 0, "" //stderr 0:none, 1:auto or >>stdout, 2-8:same as stdout's param
    , 0, "" //folder 0:none, 1:current, 2:specify 3:(reserved), 4:exe's
    , 1     //show   0:auto, 1:show, 2:hide, 3-13:ShellExecute()'s SW_*
    , 1     //draw   0:draw, 1:no draw when stdout redirected
    , 0     //encode 0:ansi, 2:utf-16, 6:utf-8
    , 0     //extended flags
;
endmacro;

この場合、マクロが終わっても、アウトプット枠は処理中...のままになって、言われている通りになります。
もしデバッグ用にアウトプット枠を使われている場合、デバッグでない通常使用ではアウトプット枠への出力をしない(stdoutのパラメータを0)ようにするといいです。

目的と違うかもしれませんが、アウトプット枠で処理中...にならないようにする場合、JavaScript対応の、hidemaru.runProcessで非同期の標準出力を使う方法があります。
例えば以下のようにします。
js{
 debuginfo(2);
 exe=hidemaru.runProcess( @"cmd.exe /c dir c:\windows\system32", "", "stdio", "sjis");
 //あるいはexe=hidemaru.runProcess( @"cmd.exe /c copy con c:\folder\test.txt && more c:\folder\test.txt" , "", "guiStdio", "sjis");
 exe.stdOut.onReadLine(function(s){
  console.log(s);
  });
}
endmacro;

ただこの場合は、runexとは違って、実行した秀丸エディタを終了すると終わってしまうので、ずっと常駐させるには向かないかもしれません。
ずっと常駐させつつ、さらに秀丸エディタを終了させてもずっとモニタリングするのは難しいですが、プライベートモードを使うと一応不可能ではないです。
でもアウトプット枠は使えない制限もあって、けっこう複雑なことになってきます。
[ ]
RE:40302 マクロで起動した常駐アプリの終了方法No.40303
(-L-) さん 23/02/06 14:09 [ コメントを投稿する ]
アウトプット枠の仕様ということで理解しました。
(常駐アプリの出力を見たいケースもあるため)runexで、SW_を 7で実行することで、そこそこの使い勝手になることが解ったので、ありがとうございました。
[ ]

[ 新規に投稿する ]