|   |  
たるっぱです、質問させてください。 
 
本体ウィンドウはそのままで、エディタウィンドウのみを全て閉じるマクロを 
作りました。どなたか既に作っていそうですが・・・ 
 
---------------------------------------------------------------------- 
    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; 
 
			 | 
		  
	 |