|
例の inputstate と windowstate2 で結構うまく動いておるのでは? という気がします。
自動起動マクロ自体を直す感じで以下みたいにしました。
(今まで使っていた自動起動マクロ名は「OnEventMacroMain.mac」とする)
// ---- 新自動起動マクロ OnEventMacro.mac
hidemaruversion "9.46.02";
// 自動起動マクロでファイルを開いた時は、予約形式にする
if (event == 1) {
jsmode "JScript\\" + currentmacrofilename;
js {
var currentMacroDirectory = currentmacrodirectory(); // 非同期になると取れないため、取得
function isSafeMakeConditionOfWebView2Pane() {
// タブモードでアクティブではない非表示
if( (windowstate2() & 0x0004) != 0 ){
return false;
}
// デスクトップ復元中
if (inputstates() & 0x00080000) {
return false;
}
return true;
}
var timerHandle; // 宣言だけ。初期化しないこと
if (typeof("timerHandle") != "undefined") {
hidemaru.clearTimeout(timerHandle);
}
// マクロ実行を予約する
function reserveExecMacroFile(macroFileFullPath) {
// ダメなタイミングなら、0.5秒後にまたチェック
if (!isSafeMakeConditionOfWebView2Pane()) {
timerHandle = hidemaru.setTimeout(reserveExecMacroFile, 500, macroFileFullPath);
return;
}
// 大丈夫そうなので、マクロ実行を予約
hidemaru.setTimeout( function() {
var isScheduled = hidemaru.postExecMacroFile(macroFileFullPath, 1);
if (isScheduled) {
hidemaru.clearTimeout(timerHandle);
} else {
// マクロ予約自体が失敗しているので、0.2秒後にまたチェック
timerHandle = hidemaru.setTimeout(reserveExecMacroFile, 200, macroFileFullPath);
}
}, 0
);
}
reserveExecMacroFile(currentMacroDirectory + "\\OnEventMacrosMain.mac");
}
// それ以外はこれまで通り
} else {
execmacro currentmacrodirectory + "\\OnEventMacrosMain.mac";
}
// ---- 旧自動起動マクロ OnEventMacroMain.mac
先頭の部分のみ修正
if (argcount > 0) {
#eventID = val(getarg(0));
} else {
#eventID = event;
}
で、event の代わりに、#eventID を使う。これまで通り。
これで、「デスクトップ復元」の間は、自動起動マクロは「予約だけ」されて、
実際の実行は、タブを始めてアクティブにした時に実行される形となったので、
ほぼ想定していた動作となりました。
「ファイルを開いた時」に自動起動していた
個別ブラウザ枠やレンダリング枠を使うのもの、
バグなく上手くいってると思います。
|
|