|
再投稿ですみません。
以下のマクロでご確認お願い出来ますでしょうか。
ご確認いただけたら、ライブラリの方もアップロードし直しさせていただきます。
(前回のZip圧縮マクロも)
// 添付ファイル圧縮-7zip.mac by 斉藤秀夫
// 2012.02.24
// 2012.04.02 秀丸メール本体ウィンドウ上で実行してうまくいかないバグ修正。
// 2013.02.28 既に.zip単独ファイルになってる物は圧縮しない。
// 7-zipのダウンロード先: http://sevenzip.sourceforge.jp/
//パスワード付きにする場合はここにパスワードを設定しておく。
//パスワード無しにするなら""を代入する。
//パスワードを毎回入力したい場合は $password = "*"としておく。
//パスワードの中には空白は入れないでください。
//
// 例:
// $password = ""; ... パスワード無し
// $password = "pass"; ... パスワードを"pass"にする。
// $password = "*"; ... パスワードを毎回入力する。
$password = "*";
loaddll "tkinfo.dll";
$7zip = "C:\\Program files\\7-Zip\\7z.exe";
if( ! existfile( $7zip ) ) {
$7zip = "C:\\Program files (x86)\\7-Zip\\7z.exe";
if( ! existfile( $7zip ) ) {
message "7-Zipのプログラム用ファイルが見つかりません。7-Zipをイ
ンストールしてください。\n\n" +
"7-Zipは、C:\\Program files\\7-Zip またはC:\\Program fil
es (x86)\\7-Zip にインストールされてる必要があります。";
endmacro;
}
}
openreg "CURRENTUSER", "Software\\Hidemaruo\\TuruKame\\Config";
$home = getregstr( "HomeDir" );
closereg;
$account = dllfuncstr("CurrentAccount");
if( dllfunc("IsTuruKameMain") ) {
question "現在選択しているメール(複数も可)の添付ファイルを圧縮しま
す。よろしいですか?";
if( result == yes ) goto CompressAll;
endmacro;
}
if( dllfunc("MailType") == 3 ) {
message "受信したメールの添付ファイル・圧縮は、秀丸メール本体上でし
か実行できません。";
endmacro;
}
if( readonly ) {
#n = dllfunc("EnableEdit");
}
#cAttach = 0;
while(1) {
$aAttach[#cAttach] = dllfuncstr("CurrentHeader2", "X-Attach"
, #cAttach );
if( $aAttach[#cAttach] == "" ) break;
#cAttach = #cAttach + 1;
}
if( #cAttach == 0 ) {
message "添付ファイルは1つもありません。";
endmacro;
}
if( #cAttach == 1 ) {
if( rightstr( $aAttach[0], 4 ) == ".zip" ) {
message "添付ファイルは既に圧縮されてます。";
endmacro;
}
$dest = $aAttach[0] + ".zip";
} else {
$dest = $aAttach[0] + "など.zip";
}
while(1) {
#n = strstr( $dest, "\\" );
if( #n < 0 ) {
break;
}
$dest = midstr( $dest, #n + 1, 256 );
}
$dest = input( "圧縮して作成するファイル名は?", $dest );
if( $dest == "" ) {
endmacro;
}
if( $password == "*" ) {
$password = input( "パスワードは?" );
if( $password == "" ) {
question "パスワード無しにしますか?";
if( result != yes ) {
endmacro;
}
}
}
if( $password != "" ) {
$7zip = $7zip + " -p" + $password;
}
$tmp = getenv("temp");
if( $tmp == "" ) {
$tmp = getenv("tmp");
}
if( rightstr($tmp, 1) != "\\" ) {
$tmp = $tmp + "\\";
}
$dest = $tmp + $dest;
#n = dllfunc("Bypass_SetFileAttributes", $dest, 0x00000020);
#n = dllfunc("Bypass_DeleteFile", $dest);
//添付ファイル圧縮-7zip.macで修正。
//$cmd = "-j \"" + $dest + "\"";
$cmd = "a \"" + $dest + "\"";
#i = 0;
while( #i < #cAttach ) {
$cmd = $cmd + " \"" + $home + $account + "\\" + $aAttach[#i] + "\"";
#i = #i + 1;
}
//添付ファイル圧縮-7zip.macで修正。
//#n = dllfunc("Zip", hidemaruhandle(0), $cmd);
runsync2 $7zip + " " + $cmd;
if( !result ) {
message "7zipの実行に失敗しました。";
endmacro;
}
#n = dllfunc( "AddAttach", $dest );
// ファイルの削除
#n = dllfunc("Bypass_DeleteFile", $dest);
#i = 0;
while( #i < #cAttach ) {
#n = dllfunc( "UndoAttach", $aAttach[#i] );
#i = #i + 1;
}
endmacro;
// 受信したメールの添付ファイルを圧縮する処理。
CompressAll:
#n = dllfunc("LockSelection");
#cCompressed = 0;
#cCompressedMail = 0;
while( dllfunc("EnumSelection", 1) != 0 ) {
#attachcount = dllfunc("CountCurrentHeader", "X-Attach");
if( #attachcount != 0 ) {
if( #attachcount == 1
&& dllfuncstr("ToLower", rightstr( dllfuncstr("CurrentHeader",
"X-Attach"), 4 ) ) == ".zip" ) {
//スキップ
if( #warningshown == 0 ) {
#warningshown = 1;
message "既にzip形式になってる添付ファイルが1つだけある
メールをスキップします。";
}
} else {
#n = dllfunc("BeginEditMail");
#WantSave = 1;
#i = 0;
//2006.4.14 複数ファイルをまとめて1つにするバージョン
$attach = dllfuncstr("CurrentHeader", "X-Attach");
$path = $home + $account + "\\" + $attach;
if( #attachcount == 1 ) {
$lzh = $attach + ".zip";
$pathLzh = $path + ".zip";
} else {
$lzh = $attach + "など.zip";
$pathLzh = $path + "など.zip";
}
//添付ファイル圧縮-7zip.macで修正。
//$cmd = "-j \"" + $pathLzh + "\"";
$cmd = "a \"" + $pathLzh + "\"";
while(1) {
$attach = dllfuncstr("CurrentHeader2", "X-Attach", #i);
if( $attach == "" ) {
break;
}
$path[#i] = $home + $account + "\\" + $attach;
$cmd = $cmd + " \"" + $path[#i] + "\"";
#i = #i + 1;
#count = #i;
#cCompressed = #cCompressed + 1;
}
#cCompressedMail = #cCompressedMail + 1;
//添付ファイル圧縮-7zip.macで修正。
//#n = dllfunc("Zip", hidemaruhandle(0), $cmd);
runsync2 $7zip + " " + $cmd;
if( !result ) {
message "7zipの実行に失敗しました。マクロを中断します。";
endmacro;
}
if( ! existfile( $pathLzh ) ) {
message "Zip圧縮に失敗しました。(圧縮によって生成された
はずのファイルがありません。)";
#WantSave = 0;
} else {
#n = dllfunc("Bypass_SetFileAttributes", $pathLzh, 0x000
00021); //ReadOnly属性に設定。
#i = 0;
while( #i < #count ) {
#n = dllfunc("Bypass_SetFileAttributes", $path[#i],
0x00000020); // ReadOnlyを解除。
#n = dllfunc("Bypass_DeleteFile", $path[#i]);
#i = #i + 1;
}
while( #i > 0 ) {
#i = #i - 1;
#n = dllfunc("DeleteHeader2", "X-Attach", #i);
}
#n = dllfunc("SetHeader", "X-Attach", $lzh);
}
if( #WantSave ) {
#n = dllfunc("SaveEditMail", 0);
} else {
#n = dllfunc("CancelEditMail");
}
}
}
}
#n = dllfunc("UnlockSelection", 1);
if( #cCompressedMail == 0 ) {
message "圧縮した添付ファイルはありませんでした。";
} else {
message str(#cCompressedMail) + "通のメールの、 " + str(#cCompresse
d) + "個の添付ファイルを圧縮しました。";
}
endmacro;
|
|