マクロで起動した常駐アプリの終了方法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" //Ctr
l+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で実行することで、
そこそこの使い勝手になることが解ったので、ありがとうございました。

[ ]