|
たるっぱです、質問させてください。
本体ウィンドウはそのままで、エディタウィンドウのみを全て閉じるマクロを
作りました。どなたか既に作っていそうですが・・・
----------------------------------------------------------------------
setactivehidemaru #handle[#i];
#dmy = dllfunc( "SetMainWndTop" );
----------------------------------------------------------------------
この2行は無駄に思えますが、入れておかないと、6つ以上エディタウィンドウが
出ていた場合に、何度目かのclosehidemaruで保護違反が起こるんです。
これには、仕様上の理由があるんでしょうか?
マクロ自体は目的の通り動いているのでいいんですが、今後の参考のために、
確認しておきたいと思ったんです。
OS : Windows2000 SP2
鶴亀Ver : 1.61
秀丸Ver : 3.15
必要でしたら、障害時のdump.txtをお見せします。以下、問題のマクロです。
----------------------------------------------------------------------
// エディタウィンドウのみを全終了する
// #handle ウィンドウハンドルの配列
// #i ウィンドウハンドル配列のインデックス
// #dmy ステータスチェックをしない場合の戻り値
// #allwin エディタウィンドウの総数
// #winnum 処理対象エディタウィンドウの数
loaddll "tkinfo.dll";
if( !result ) {
message "tkinfo.dllが使えません";
endmacro;
}
if( !dllfunc("IsTuruKame") ) {
endmacro;
}
// 本体ウィンドウをactiveに
if(!dllfunc( "SetMainWndTop" )) {
exitall;
endmacro;
}
// エディタウィンドウのハンドル収集
#allwin = hidemarucount;
#i = 1;
while( #i < #allwin ) {
#handle[#i] = hidemaruhandle(#i);
#i = #i + 1;
//if (#i > 5) break;
}
// エディタウィンドウを閉じる
#winnum = #i - 1;
#i = 1;
while( #i <= #winnum ) {
setactivehidemaru #handle[#i];
#dmy = dllfunc( "SetMainWndTop" );
closehidemaru #handle[#i];
if(!result ) {
setactivehidemaru #handle[#i];
question "保存されていません、閉じてもいいですか";
if(result == yes ){
#dmy = dllfunc( "SetMainWndTop" );
closehidemaruforced #handle[#i];
}
}
#i = #i + 1;
}
// 終了
endmacro;
|
|