|
capa です。
うまく動作するケースもあるとのことで、設定等の問題でもないし…
ということで、原因切り分けのために末尾のマクロにて動作確認しても
らってもよろしいでしょうか。
マクロ名はtest.macとでもしてマクロ用のフォルダに登録し、手動実行
や受信時の自動起動マクロとしてテストしてみてください(iniファイル
は現在のものを使用しますので新たに設定する必要はありません)。
このマクロに変更してエラーメッセージが表示されるようになった場合
はその内容を教えてください。このマクロでもエラーメッセージが表示
されず、なおかつ振り分けられないケースがあるようでしたら…、ごめ
んなさい、ちょっとお手上げです。
あまり参考にならないかもしれませんが、念のためOSの種類や秀丸メー
ルのバージョンも教えてください。あとはGDS連携を使っているとかホー
ムディレクトリがリモートマシン上にあるとかキー入力をさらうような
特殊な常駐ソフトを組み込んでいるとか…、何かちょっと普通とは違う
かなぁと思われるような環境があれば何かヒントになるかもしれません。
お手数かけてすみませんがよろしくお願いします。
---BypassFolder.mac ver.1.02b
// アカウント越しのメール振り分け補助マクロ ver.1.02b
// 2005/11/10 presented by capa
$McrJName = "アカウント越しのメール振り分け補助マクロ";
$McrName = "BypassFolder";
loaddll "tkinfo.dll";
if(!result) {
call McrMsg "tkinfo.dll のロードに失敗しました";
endmacro;
}
if(!dllfunc("IsHidemaruMailMain")){
call McrMsg "秀丸メール本体から実行してください";
endmacro;
}
// 移動設定をINIファイルから取得
$path = dllfuncstr("HomeDir") + $McrName + ".ini";
if(!existfile($path)){
call McrMsg "設定ファイル " + $path + " が見つかりません\n" +
"処理を中止します";
endmacro;
}
#i = -1;
#endflag = 0;
while(!#endflag){
#i = #i + 1;
#nullcnt = 0;
call GetBFIni #i;
if(#nullcnt > 0) #endflag = 1;
}
// 取得に失敗した場合の処理
if(#nullcnt < 4) goto INIERR;
if(#nullcnt == 4 && #i == 0) goto INIERR;
// 処理メイン
#CondNum = #i;
#iflag = 0;
#i = 0;
while(#i < #CondNum){
// GetFolderMailCount実行前にフォルダ有無のチェック
$fname = dllfuncstr("HomeDir") + "\\" + $FA[#i] + "\\" + $FF[#i];
if(!existfile($fname)) goto FERR;
// メールがあれば処理開始
#mcnt = dllfunc("GetFolderMailCount",$FA[#i],$FF[#i]);
if(#mcnt>0){
// マクロ実行前の環境退避
if(#iflag==0) call InitEnv;
if(!dllfunc("SelectFolder",$FA[#i],$FF[#i])) goto FERR;
// 表示範囲を全体に変更
#va = dllfunc("ViewArea");
#n = dllfunc("SetViewArea",0);
// すべてのメール選択
#n = sendmessage( hidemaruhandle(0), 0x0111, 40008, 0);
// メールの移動
if(#mcnt==dllfunc("SelectedMailCount")){
if(!dllfunc("Move",$TA[#i],$TF[#i])) goto TERR;
}else{
call SelectErr;
}
// 表示範囲を元に戻す
#n = dllfunc("SetViewArea",#va);
}
#i = #i + 1;
}
END:
if(#iflag>0) call RecvEnv;
endmacro;
// エラー処理部
INIERR:
$keystr = "\n[MoveSet" + str(#i) + "]";
if ($FA[#i] == "") $keystr = $keystr + "\n・FromAccount";
if ($FF[#i] == "") $keystr = $keystr + "\n・FromFolder";
if ($TA[#i] == "") $keystr = $keystr + "\n・ToAccount";
if ($TF[#i] == "") $keystr = $keystr + "\n・ToFolder";
call McrMsg "設定ファイルからの以下のキーの取得に失敗しました" + $keystr +
"\n処理を中止します";
goto END;
FERR:
#idx = #i + 1;
call McrMsg "設定ファイル(" + $McrName + ")の\n" +
"FromAccount" + str(#idx) + "、FromFolder" + str(#idx) + "で指示された\n" +
"以下のフォルダが見つかりません\n" +
"アカウント名=" + $FA[#i] + "\nフォルダ名=" + $FF[#i] ;
goto END;
TERR:
#idx = #i + 1;
call McrMsg "設定ファイル(" + $McrName + ")の\n" +
"ToAccount" + str(#idx) + "、ToFolder" + str(#idx) + "で指示された\n" +
"以下のフォルダが見つかりません\n" +
"アカウント名=" + $TA[#i] + "\nフォルダ名=" + $TF[#i] ;
goto END;
// 各種サブルーチン
GetBFIni: // INIファイルからの情報抽出
$$secstr = "MoveSet" + str(##1);
$FA[##1] = getinistr($path, $$secstr, "FromAccount");
if($FA[##1]=="") #nullcnt = #nullcnt + 1;
$FF[##1] = getinistr($path, $$secstr, "FromFolder");
if($FF[##1]=="") #nullcnt = #nullcnt + 1;
$TA[##1] = getinistr($path, $$secstr, "ToAccount");
if($TA[##1]=="") #nullcnt = #nullcnt + 1;
$TF[##1] = getinistr($path, $$secstr, "ToFolder");
if($TF[##1]=="") #nullcnt = #nullcnt + 1;
return;
InitEnv: // マクロ実行前の環境退避
// アカウントごしのメールの移動でも確認画面を出さない設定にする
openreg "CURRENTUSER","Software\\Hidemaruo\\TuruKame\\Config";
if(result){
#Confirm = getregnum("Confirm");
writeregnum "Confirm",#Confirm & 0xFFFFFFDF;
}
else{
message "レジストリのオープンに失敗しました";
endmacro;
}
#n = dllfunc("EnvChanged");
// 現在情報の退避
$ca = dllfuncstr("CurrentAccount");
$cf = dllfuncstr("CurrentFolder");
#itv = dllfunc("IsThreadView");
#n = dllfunc("DisableDraw",1);
#n = dllfunc("SetThreadView",0);
#mi = dllfunc("MailIndex");
#iflag = 1;
return;
RecvEnv: // マクロ実行前環境の復元
#n = dllfunc("SelectFolder",$ca,$cf);
#n = dllfunc("SetMailIndex",#mi);
#n = dllfunc("SetThreadView",#itv);
#n = dllfunc("EnableDraw");
writeregnum "Confirm",#Confirm;
#n = dllfunc("EnvChanged");
closereg;
return;
SelectErr:
call McrMsg "以下のフォルダの「すべて選択」コマンドが失敗しました\n" +
"アカウント名=" + $FA[#i] + "\nフォルダ名=" + $FF[#i] ;
return;
McrMsg: // マクロ用メッセージ出力関数
message $McrJName + "(" + $McrName + ".mac)\n" + $$1;
return;
|
|