圧縮マクロ attachcompress-7zip.zipNo.44168
ZZPOP さん 13/02/28 00:38
 
 添付ファイル圧縮 by 7-zip について

『圧縮マクロattachcompress4.zipについて』の内容と同じ現象
http://www.maruo.co.jp/hidesoft/8/x43320_.html

が「attachcompress-7zip.zip」でもありまして、
マクロ記述がわからないので相談させてください。


【現象】
送信・受信で添付ファイル圧縮マクロを実行すると
すでにZIP圧縮済みの添付ファイルが、再度ZIP圧縮されてしまいます。

aaa.zip → aaa.zip.zip

aaa.zip & bbb.xls
→ aaa.zip.zip (aaa.zip.zip内に aaa.zipとbbb.xlsを含む)

【要望】
すでにzip化されてる添付ファイルは、
圧縮せずに無視しするようにしたい。


よろしくお願いいたします。

[ ]
RE:44168 圧縮マクロ attachcompress-7zipNo.44171
秀まるお2 さん 13/02/28 10:19
 
再投稿ですみません。

以下のマクロでご確認お願い出来ますでしょうか。

ご確認いただけたら、ライブラリの方もアップロードし直しさせていただきます。
(前回の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;

[ ]