/xでスクリプトを実行するとフォーカスがNo.10212
suzu さん 22/07/15 06:30
 
起動オプション/xで、Messageなどの小窓が出るスクリプトを実行すると、秀丸ファ
イラーからフォーカスが外れるようです。
HmFilerClassic.exe /x ...\test.js

スクリプトはこのようなものです。
Message('Hello world');

これは、ユーザーが意図しない返答をしてしまうことを避けるための、Windowsの仕
様のようです。
アクティブになった直後のプログラムがダイアログを出すと、強制的にフォーカスを
外すようになっているそうです。
ところが、なぜか秀丸エディタ・秀丸メールの場合はフォーカスを失いません。

コマンド
hidemaru.exe /x test.mac
TuruKame.exe /x test.mac

マクロ
message "hello world";

秀丸ファイラーでも同様にする方法があるなら、できると嬉しいんですが、なんとか
なりますでしょうか。

[ ]
RE:10212 /xでスクリプトを実行するとフォNo.10213
秀丸担当 さん 22/07/15 12:31
 
コマンドラインで既存のウィンドウをアクティブにするのとスクリプト/マクロ実行
をするのを比べてみたところ、確かに違いがありました。
調べてみたら、秀丸ファイラーClassicは、スクリプトを実行してからアクティブに
しようとするという違いがありました。
同じように、アクティブにしてからスクリプトを実行するように修正致します。

[ ]
RE:10213 /xでスクリプトを実行するとフォNo.10274
suzu さん 22/07/29 05:35
 
Ver1.78β2での、本件の対応ありがとうございます。
秀丸エディタなどからスクリプトを呼び出しても、最前面に来るようになりました。

ただちょっと問題がありまして。秀丸ファイラースクリプトからやろうとすると、何
故か実行できたりできなかったりします。
つまり、WScript.ShellのRunで、FullName + "/m /x ..."みたいに、スクリプトから
スクリプトを呼び出す処理です。
実行されなくても、エラーも出ない状況です。

sleep()メソッドを挟むと何故か実行できたり(ゼロ秒でも)、Runの前後にGUIを出
す(Message的な)処理があると実行できなかったりで、どうにも現象の条件を掴み
きれません。
本来こういうことはしっかり調べてから相談すべきとは思うのですが、さっぱりわか
らなくて混乱しているところです。

スクリプト=>ファイラー本体=>スクリプトの呼び出しは、なにか無理があるのでしょ
うか。
あるいはスクリプトの多重起動を防ぐ仕組みがあるのでしょうか。

そこでお願いなんですが、execmacroの秀丸ファイラー版を作ることは可能でしょうか。
スクリプト=>スクリプトの呼び出しが直接できるなら、そのほうが安定動作が期待で
きそうだと思うのですが、どうでしょうか。

[ ]
RE:10274 /xでスクリプトを実行するとフォNo.10275
秀丸担当 さん 22/07/29 11:28
 
/m /xでできない場合というのは、スクリプトの実行中は、同時にスクリプトの実行
はできないようになっていました。
エラーメッセージを出せるようにできないか検討します。

execmacroのようなメソッドは無いですが、一応ファイルを読み込んでevalすればで
きなくもないようでした。

例:
---------------------------
//C:\Folder\a.js
message("This is a.js");
var strGlobal = "Set strGlobal in a.js";

(function(){//Begin JScript local scope

  var strLocalA = "Set strLocalA in a.js";
  execJs( "C:\\Folder\\b.js" );
  message(strGlobal);
  message(strLocalA);
 
}());//End JScript local scope

function execJs( strJsFile ) {
  var strJsText = loadTextFileUtf16( strJsFile );
  eval( strJsText );
}

function loadTextFileUtf16( strJsFile ) {
  var fso = new ActiveXObject("Scripting.FileSystemObject");
  var file = fso.OpenTextFile(strJsFile,1,0,-1/*UTF-16*/);
  var strText = file.ReadAll();
  file.Close();
  file = null;
  fso = null;
  return strText;
}

---------------------------
//C:\Folder\b.js(UTF-16で保存する必要があります)
message("This is b.js");
strGlobal = "Set strGlobal in b.js";
strLocalA = "Set strLocalA in b.js";

---------------------------

最近BOMなしUTF-8が台頭してきていて、ファイル読み込みのエンコード指定がちょっ
と面倒ではあります。
なので例ではUTF-16にしています。

秀丸エディタV9.18β版でJavaScript対応していて、execjsやhidemaru.loadTextFile
で似た手法もやろうとしているので、どちらもloadTextFileというメソッドでShift-
JIS/UTF-8/UTF-16の3パターンは簡単に読み込めるようにしようと思います。


[ ]
RE:10275 /xでスクリプトを実行するとフォNo.10276
suzu さん 22/07/30 05:39
 
ご返答と、サンプルスクリプトをどうもありがとうございます。

eval()とかFuntion()関数とかは、僕も使っているんですが、積極的には頼りにしな
いほうがよいと思います。
変数スコープの問題(これは使い道次第ですが)や、エラーメッセージで発生行も教
えてもらえない問題もあるんですが、マルウェアと判断されるという問題があります。
手元のいくつかのスクリプトが"Trojan:Script/Wacatac.B!ml"と言われて、まいって
います。
(そりゃあ、「任意のコマンドを実行」できるので…)

UTF-8のファイルの読み込みが簡単にできるようになりそうなのはとても嬉しいニ
ュースです。
今はADODB.Streamを使ってやっているんですが、単に「読んで弄って保存」だけで数
十行も必要なので、うんざりしているところでした。

エラーメッセージの話が出たので。
秀丸エディタでは、エラーメッセージにマクロファイル名が出ますが、秀丸ファイ
ラーの方はスクリプトファイル名は表示されません。いろいろ事情はありそうですが、
もし可能ならエラーが発生したスクリプトファイル名が表示されるとありがたいです。

秀丸エディタの方のjs()は、最高に嬉しい話なんですが、例によって秀丸メールに来
るまで「お預け」な部分が多くて・・・。

[ ]
RE:10276 /xでスクリプトを実行するとフォNo.10284
秀丸担当 さん 22/08/01 10:36
 
スクリプトでエラーが出たとき、ファイル名の表示はありませんでした。
ファイル名も表示できるように修正します。

[ ]