openfileなどについてNo.09248
fzok4234 さん 20/08/14 21:08
 
お世話になっております。

さて、openfile文などで新たに秀丸エディタのインスタンスを生成する処理について、
分からないことが
2つあります。

1. マクロの実行対象を現在の秀丸エディタから動かすことなく新たに秀丸エディタ
を開くにはどうすれば
   良いのでしょうか。setcompatiblemodeを0x08000000に設定していたり、DLL側か
らHidemaru_EvalMacro()で
   openfileなどを呼び出すと、マクロの実行対象が新しい秀丸エディタに移ろうと
してエラーになって
   しまいます。そこで、マクロの実行対象を動かすことなくopenfileなどを呼び出
す必要があるのですが、
   その方法がわかりません。

2. openfileなどで新しい秀丸エディタが開かれている間にマクロを中断して、これ
を閉じたら再開するには
   どうすればよいのでしょうか。現状では、findhidemaru()が-1でないかどうかをw
hileループで監視し続ける
   「ビジーウェイト」に頼らなければいけません。ユーザーに何かを通知する際、m
essage文のメッセージ
   ボックスでは表示できる文字数が限られているなど何かと制約があるため、新し
い秀丸エディタを通知用の
   UIとして活用したいと思っています。

どうかよろしくお願いします。


[ ]
RE:09248 openfileなどについてNo.09250
秀丸担当 さん 20/08/17 09:51
 

>1. マクロの実行対象を現在の秀丸エディタから動かすことなく新たに秀丸エディタを
>開くにはどうすれば
>   良いのでしょうか。setcompatiblemodeを0x08000000に設定していたり、DLL側から

目的と違うかもしれないですが、近い動作になるものとしては、わりと最近追加され
たものとして、setbackgroundmodeがあります。
setbackgroundmodeの目的としては、setactivehidemaru等で2つの秀丸エディタを切
り替えながら実行するマクロがあると、ウィンドウが前面に来てしまうことを防ぐた
めにあります。

例えば以下のマクロだと、非タブモードでウィンドウが2つある場合に前面に来てし
まい、他のアプリの操作や、手動起動で操作する秀丸エディタの操作が困難ですが、
setbackgroundmode 1;をすると前面に来ないようになります。

//ここで
// setbackgroundmode 1;
//をすると前面に来ない
if(tabmode!=0){
  message "タブモードOFFで実行してください。";
  endmacro;
}
newfile;
#a=hidemaruhandle(0);
newfile;
#b=hidemaruhandle(0);
setactivehidemaru #a;
while(1){
  setactivehidemaru #a;
  insert "Aです\n";
  setactivehidemaru #b;
  insert "Bです\n";
}
endmacro;


この応用というか、この目的とは違うのですが、setbackgroundmode 1;と合わせて、
手動でhidemaru.exeを起動するのと同じように以下の文で起動すると、マクロ実行対
象とは外れたところで起動して操作できるようになります。
(/iだとタブモードでもウィンドウ分離します)

openbyshell "\""+hidemarudir+"\\hidemaru.exe\" /i";


>2. openfileなどで新しい秀丸エディタが開かれている間にマクロを中断して、これを
>閉じたら再開するには
>   どうすればよいのでしょうか。現状では、findhidemaru()が-1でないかどうかを

簡単には、runsync2文あるいはrunexの同期ONで、hidemaru.exe自身を起動してしま
うとCPU的にはいいですが、マクロ実行している秀丸エディタ自身は全く操作できな
いことになります。
例:
newfile;
insert "実行前\n";
runsync2 "\""+hidemarudir+"\\hidemaru.exe\" /i";
insert "実行後\n";
endmacro;


マクロ実行中に情報をモニタにするには、debuginfo文を使うのがおすすめです。
DebugViewなどのOutputDebugStringを表示できるソフトか、VisualStudioでプロセス
にアタッチしてデバッグして見ることもできます。
debuginfo 1;
debuginfo "test\x0a";

もっと簡単には、秀丸エディタ自身のアウトプット枠に表示させる方法もあります。
debuginfo 2;
debuginfo "test\x0a";

[ ]