|
添付ファイルを整理するマクロを作ってみました。
このマクロを作る課程で、DeleteHeader2関数のバグも見つけてしまいました。
このマクロは秀丸メール本体上で実行する用です。
loaddll "tkinfo.dll";
if( leftstr( dllfuncstr("CurrentHeader", "X-Mailer"), 9 )
!= "AppleMail" ) {
endmacro;
}
#cAttach = dllfunc("CountCurrentHeader", "X-Attach" );
if( #cAttach <= 1 ) {
endmacro;
}
openreg "CURRENTUSER", "Software\\Hidemaruo\\TuruKame\\Config";
$home = getregstr( "HomeDir" );
closereg;
$account = dllfuncstr("CurrentAccount");
#i = 0;
#n = dllfunc("BeginEditMail");
while( #i < #cAttach ) {
$name1 = dllfuncstr("CurrentHeader2", "X-Attach", #i );
$name2 = dllfuncstr("CurrentHeader2", "X-Attach", #i + 1 );
#x = strstr( $name2, "(2)" );
if( leftstr( $name1, #x ) != leftstr( $name2, #x )
|| midstr( $name1, #x, 256 ) != midstr( $name2, #x + 3, 256 ) ) {
//おかしい
message "添付ファイル・ファイル名が2つペアになってません。";
break;
}
$path1 = $home + $account + "\\" + $name1;
#n = dllfunc("Bypass_SetFileAttributes", $path1, 0x00000020);
#n = dllfunc("Bypass_DeleteFile", $path1 );
if( #n == 0 ) {
//おかしい
#n = dllfunc("Bypass_GetLastError");
message "添付ファイル(リソースフォーク部分)" +
"の削除に失敗しました。ファイル名 = "
+ $name1 + " エラーコード = " + str(#n);
break;
}
#n = dllfunc("Bypass_SetFileAttributes", $path2, 0x00000020);
$path2 = $home + $account + "\\" + $name2;
#n = dllfunc("Bypass_MoveFile", $path2, $path1 );
if( #n == 0 ) {
//おかしい
#n = dllfunc("Bypass_GetLastError");
message "添付ファイル・ファイル名の変更に失敗しました。" +
"ファイル名 = " + $name2
+ " エラーコード = " + str(#n);
break;
}
#n = dllfunc("Bypass_SetFileAttributes", $path1, 0x00000021);
$new[#new] = $name1;
#cDelete = #cDelete + 2;
#new = #new + 1;
#i = #i + 2;
}
#i = 0;
while( #i < #cDelete ) {
#n = dllfunc("DeleteHeader", "X-Attach");
#i = #i + 1;
}
#i = 0;
while( #i < #new ) {
#n = dllfunc("AddHeader", "X-Attach", $new[#i] );
#i = #i + 1;
}
#n = dllfunc("SaveEditMail", 0, 0);
|
|