[ 新規に投稿する ]

openfileなどについてNo.09248
fzok4234 さん 20/08/14 21:08 [ コメントを投稿する ]
  お世話になっております。

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

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

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

[ 新規に投稿する ]