Re:鶴亀で各フォルダのメール数を確認するNo.00454
hi_sugar さん 03/10/11 08:28
 
こんにちは、hi_sugarです。

  hidesoft.4:03892| 鶴亀で各フォルダのメール数を確認するマクロについて

 からの誘導です。
 
 全アカウントに対して各フォルダにあるメール数リストアップし結果を新規
メールとして出力するマクロです。

//-----ここから-------------------------------------------------------
//  メールカウントマクロ mailcount.mac by hi_sugar 2003/10/11
#indent = 2 ;                  // フォルダの階層間のインデント数
#fnmax = 40 ;                  // メール数の表示カラム
call Load_Tkinfo ;
call Check_Tkmain ;
#mwh = dllfunc("MainWnd");
$bname[0] = "受信" ;
$bname[1] = "未送信" ;
$bname[2] = "送信済み" ;
$bname[3] = "草稿" ;
$bname[4] = "ゴミ箱" ;
$bname[5] = "User" ;
#bname_num = 6 ;
#n = dllfunc( "DisableDraw",1 );
$cur_account    = dllfuncstr("CurrentAccount") ;
$cur_folder     = dllfuncstr("CurrentFolder") ;

if ( !dllfunc("NewMail") ) {
    message "メールの作成に失敗しました";
    goto TurukameEnd ;
}
#n = dllfunc("SetHeader", "Subject" , "Mail Count on "+
              dllfuncstr("CurrentDate", "YYYY/MM/DD hh:mm") );
gofiletop;
beginsel;
gofileend ;
delete;

#aid = 0;
#totalall = 0 ;
while (1) {
    $account = dllfuncstr( "ExecAt" , #mwh , "Account", #aid );
    if ( $account == "" ) break ;
    insert "●" + $account + "●\n" ;
    #i = 0 ;
    while ( #i < #bname_num ) {
        #bname_cnt[#i] = 0 ;
        $next_folder = $bname[#i] ;
        $folder = $bname[#i] ;
        #level = 0 ;
        if ( ! dllfunc( "ExecAt",#mwh,"SelectFolder",$account,
                 $next_folder ) ) {
            #i = #i + 1 ;
            continue ;
        }
        while (1) {
            #mcnt = dllfunc( "ExecAt",#mwh ,"GetFolderMailCount",
                             "", "", "all") ;
            call Split_Line , $next_folder , "\\" ;
            #level = ##return ;
            call Space , (#level-1) * #indent ;
            insert $word[#level - 1] ;
            call Space , #fnmax - length($word[#level - 1]) -
                        (#level-1) * #indent ;
            insert rightstr("       " + str(#mcnt) ,8) + "\n" ;
            #bname_cnt[#i] = #bname_cnt[#i] + #mcnt ;
            $next = dllfuncstr("ExecAt",#mwh,"GetNextFolder", "", "");
            #x = strstr( $next, "\\");
            if ( #x >= 0 ) {
                $next_account = leftstr( $next, #x );
                $next_folder = midstr( $next, #x + 1,
                                 length($next) - #x - 1 );
            } else {
                $next_account = $next;
                $next_folder = "";
            }              
            if ( $account != $next_account || strstr( $next_folder ,
                 $bname[#i] ) != 0 ) {
                break ;
            }
            if ( ! dllfunc( "ExecAt",#mwh,"SelectFolder",$account,
                $next_folder ) ) {
                break ;
            }
           
        }
        #i = #i + 1 ;
    }
    call Space , #fnmax + 8 , "-" ;
    insert "\n" ;
    #j = 0 ;
    #total = 0 ;
    while ( #j < #bname_num ) {
        insert $bname[#j] ;
        call Space , #fnmax - length($bname[#j]) - 5 ;
        insert "小計 " + rightstr("       " +
                str(#bname_cnt[#j]) ,8) + "\n" ;
        #total = #total + #bname_cnt[#j] ;
        #j = #j + 1;
    }
    call Space , #fnmax - 5 ;
    insert "合計 " + rightstr("       " + str(#total) ,8) + "\n\n" ;
    #aid = #aid + 1 ;
    #totalall = #totalall + #total ;
}
call Space , #fnmax + 8 , "=" ;
insert "\n" ;
call Space , #fnmax - 17 ;
insert "全アカウント総計 " + rightstr("       " +
       str(#totalall) ,8) + "\n" ;

// 状況をリストア
#n = dllfunc("ExecAt",#mwh,"SelectFolder",$cur_account,$cur_folder );
#n = dllfunc("ExecAt" , #mwh ,  "EnableDraw" );

goto TurukameEnd ;

ERROR:
message "何らかのエラーによりマクロを中止します。";

TurukameEnd:

freedll ;
endmacro;

//===================================================================
// 共用サブルーチン
//===================================================================
//////////////////
// Load_Tkinfo  //
//////////////////
// Tkinfo.dllのロード
Load_Tkinfo:
    loaddll "tkinfo.dll";
    if( ! result ) {
        message "tkinfo.dll をロードできませんでした。";
        freedll ;
        endmacro ;
    }
return ;

//////////////////
// Check_Tkmain //
//////////////////
// 本体ウィンドウ以外から実行なら終了
Check_Tkmain:
    if ( !dllfunc("IsTuruKameMain") ) {
        message "このマクロ(" + currentmacrobasename + ")は、\n" +
            "鶴亀メール本体ウィンドウからしか起動できません。";
        freedll ;
        endmacro ;
    }
return ;

////////////
// Space  //
////////////
// 指定された数の文字(省略時は半角スペース)を繰り返し挿入
//    パラメータ : ##1 スペース数
//               : $$2 スペース数
Space:
    ##num = 0 ;
    if ( $$2 == "" ) {
        $$ch = " " ;
    } else {
        $$ch = $$2 ;
    }
    while ( ##num < ##1 ) {
        insert $$ch ;
        ##num = ##num + 1 ;
    }
return ;

//////////////////
// Split_Line   //
//////////////////
// 改行までを読み取り、空白をデリミータとして単語に分割
//    パラメータ : $$1 入力ストリング
//               : $$2 セパレータ(省略時は半角スペース)
//    戻り       : ##return  分割されたワード数
//                 $word[i]  分割されたワード
Split_Line:
    ##wnum = 0 ;
    $word[0] = "" ;         // グローバルリータン変数
    if ( $$2 == "" ) {
        $$sep = " " ;
    } else {
        $$sep = $$2 ;
    }
    $$s     = $$1 ;
    ##sepl  = strlen($$sep) ;
    ##chflg = 0 ;
    while (1) {
        ##ptr = strstr($$s , $$sep) ;
        if ( ##ptr >= 0 ) {
            $word[##wnum] = leftstr($$s,##ptr) ;
            ##wnum = ##wnum + 1 ;
            $$s = midstr($$s,##ptr + ##sepl, length($$s)
                             - ##ptr - ##sepl ) ;
        } else {
            break ;
        }
    }
    $word[##wnum] = $$s ;
    ##wnum = ##wnum + 1 ;
return ##wnum ;
//-----ここまで-------------------------------------------------------

[ ]
RE:00454 Re:鶴亀で各フォルダのメール数No.00455
zoom さん 03/10/11 12:50
 
hi_sugarさんこんにちわ、コメントありがとうございます
こちらのフォーラムに出すべきでしたね。
こちらの方は少し敷居が高いというか...

マクロ使わせてもらいました。
希望通り(希望以上)の結果となりました
特に結果をファイル(新規メール)に残せるのと
メール件数が桁表示合わせてされるのがとても
気に入りました。

メールのバックアップなどもマクロでされている
のでしょうか?
私はマクロで本当のアカウントとダミーアカウント
を作成して各フォルダのメール移動をしています。
例)AAA→AAA-BAK
どうもマクロに不備があるようでエラーメッセージ
が表示される時があり、本当に正常にメール移動
されたか確認するためにバックアップ前後でメール
数の確認していました。

非常に助かりました、ありがとうございます。

[ ]
RE:00455 Re:鶴亀で各フォルダのメール数No.00456
hi_sugar さん 03/10/11 17:15
 
zoomさん、こんにちは。hi_sugarです。

>マクロ使わせてもらいました。
>希望通り(希望以上)の結果となりました

 お役にたてて何よりです。

>メールのバックアップなどもマクロでされている
>のでしょうか?

 バックアップ用にアカウント間で階層を保ったままメールを移動・複写するマ
クロを作りました。公開も考えていたのですが、マクロの性質上バグがあったり
するとちょっと怖いのでいまいち公開に踏み切れないでいます。


[ ]
RE:00456 Re:鶴亀で各フォルダのメール数No.00457
zoom さん 03/10/14 01:27
 
hi_sugarさん、こんばんわ

> お役にたてて何よりです。
->大切に使わさせていただきます


> バックアップ用にアカウント間で階層を保ったままメールを移動・複写するマ
>クロを作りました。公開も考えていたのですが、マクロの性質上バグがあったり
>するとちょっと怖いのでいまいち公開に踏み切れないでいます。
->バックアップはメールの移動がからむと思いますので
  バグがあれば確かに危険ではありますね。
  私も自作のバックアップマクロを作って試したのですが
  安心して使える代物にはなりませんでした。
  機会があれば公開していただければ試してみます
 (あくまでも個人の責任のもとで)

本当にありがとうございました。

[ ]
RE:00454 Re:鶴亀で各フォルダのメール数No.00465
hi_sugar さん 03/10/17 12:26
 
こんにちは。hi_sugarです。

 先に掲載したマクロでは、鶴亀メール Ver3.05以降、アカウント直下(User)
のフォルダのメール数がカウントされないバグがあることがわかりましたので、
使用されている方は下記に差し替えてください。

//-----ここから-------------------------------------------------------
//  メールカウントマクロ mailcount.mac by hi_sugar 2003/10/17
#indent = 2 ;                  // フォルダの階層間のインデント数
#fnmax = 40 ;                  // メール数の表示カラム
call Load_Tkinfo ;
call Check_Tkmain ;
#mwh = dllfunc("MainWnd");
$bname[0] = "受信" ;
$bname[1] = "未送信" ;
$bname[2] = "送信済み" ;
$bname[3] = "草稿" ;
$bname[4] = "ゴミ箱" ;
$bname[5] = "User" ;
#bname_num = 6 ;
if ( !dllfunc("NewMail") ) {
    message "メールの作成に失敗しました";
    goto TurukameEnd ;
}
#n = dllfunc("SetHeader", "Subject" , "Mail Count on "+
              dllfuncstr("CurrentDate", "YYYY/MM/DD hh:mm") );
gofiletop;
beginsel;
gofileend ;
delete;

#aid = 0;
#totalall = 0 ;
while (1) {
    $account = dllfuncstr( "ExecAt" , #mwh , "Account", #aid );
    if ( $account == "" ) break ;
    insert "●" + $account + "●\n" ;
    #i = 0 ;
    while ( #i < #bname_num ) {
        #bname_cnt[#i] = 0 ;
        #level = 0 ;
        if ($bname[#i] != "User") {
            $folder = $bname[#i] ;
        } else {
            insert "User\n" ;
            $folder = "" ;
        }
        while (1) {
            if ( $folder != "" ) {
                #mcnt = dllfunc( "ExecAt",#mwh ,"GetFolderMailCount",
                                 $account, $folder, "all") ;
                call Split_Line , $folder , "\\" ;
                #level = ##return ;
                call Space , (#level-1) * #indent ;
                insert $word[#level - 1] ;
                call Space , #fnmax - length($word[#level - 1]) -
                            (#level-1) * #indent ;
                insert rightstr("       " + str(#mcnt) ,8) + "\n" ;
                #bname_cnt[#i] = #bname_cnt[#i] + #mcnt ;
            } else {
                $folder = "ゴミ箱";
            }
            $next = dllfuncstr("ExecAt",#mwh,"GetNextFolder",
                             $account, $folder ) ;
            #x = strstr( $next, "\\");
            if ( #x >= 0 ) {
                $next_account = leftstr( $next, #x );
                $folder = midstr( $next, #x + 1,
                                 length($next) - #x - 1 );
            } else {
                $next_account = $next;
                $folder = "";
            }              
            if ( $account != $next_account || strstr( $folder ,
                 $bname[#i] ) != 0 ) {
                break ;
            }
        }
        #i = #i + 1 ;
    }
    call Space , #fnmax + 8 , "-" ;
    insert "\n" ;
    #j = 0 ;
    #total = 0 ;
    while ( #j < #bname_num ) {
        insert $bname[#j] ;
        call Space , #fnmax - length($bname[#j]) - 5 ;
        insert "小計 " + rightstr("       " +
                str(#bname_cnt[#j]) ,8) + "\n" ;
        #total = #total + #bname_cnt[#j] ;
        #j = #j + 1;
    }
    call Space , #fnmax - 5 ;
    insert "合計 " + rightstr("       " + str(#total) ,8) + "\n\n" ;
    #aid = #aid + 1 ;
    #totalall = #totalall + #total ;
}
call Space , #fnmax + 8 , "=" ;
insert "\n" ;
call Space , #fnmax - 17 ;
insert "全アカウント総計 " + rightstr("       " +
       str(#totalall) ,8) + "\n" ;

TurukameEnd:
freedll ;
endmacro;

//===================================================================
// 共用サブルーチン
//===================================================================
//////////////////
// Load_Tkinfo  //
//////////////////
// Tkinfo.dllのロード
Load_Tkinfo:
    loaddll "tkinfo.dll";
    if( ! result ) {
        message "tkinfo.dll をロードできませんでした。";
        freedll ;
        endmacro ;
    }
return ;

//////////////////
// Check_Tkmain //
//////////////////
// 本体ウィンドウ以外から実行なら終了
Check_Tkmain:
    if ( !dllfunc("IsTuruKameMain") ) {
        message "このマクロ(" + currentmacrobasename + ")は、\n" +
            "鶴亀メール本体ウィンドウからしか起動できません。";
        freedll ;
        endmacro ;
    }
return ;

////////////
// Space  //
////////////
// 指定された数の文字(省略時は半角スペース)を繰り返し挿入
//    パラメータ : ##1 スペース数
//               : $$2 スペース数
Space:
    ##num = 0 ;
    if ( $$2 == "" ) {
        $$ch = " " ;
    } else {
        $$ch = $$2 ;
    }
    while ( ##num < ##1 ) {
        insert $$ch ;
        ##num = ##num + 1 ;
    }
return ;

//////////////////
// Split_Line   //
//////////////////
// 改行までを読み取り、空白をデリミータとして単語に分割
//    パラメータ : $$1 入力ストリング
//               : $$2 セパレータ(省略時は半角スペース)
//    戻り       : ##return  分割されたワード数
//                 $word[i]  分割されたワード
Split_Line:
    ##wnum = 0 ;
    $word[0] = "" ;         // グローバルリータン変数
    if ( $$2 == "" ) {
        $$sep = " " ;
    } else {
        $$sep = $$2 ;
    }
    $$s     = $$1 ;
    ##sepl  = strlen($$sep) ;
    ##chflg = 0 ;
    while (1) {
        ##ptr = strstr($$s , $$sep) ;
        if ( ##ptr >= 0 ) {
            $word[##wnum] = leftstr($$s,##ptr) ;
            ##wnum = ##wnum + 1 ;
            $$s = midstr($$s,##ptr + ##sepl, length($$s)
                             - ##ptr - ##sepl ) ;
        } else {
            break ;
        }
    }
    $word[##wnum] = $$s ;
    ##wnum = ##wnum + 1 ;
return ##wnum ;
//-----ここまで-------------------------------------------------------

[ ]
RE:00457 Re:鶴亀で各フォルダのメール数No.00473
hi_sugar さん 03/10/22 22:35
 
こんにちは。hi_sugarです。

>> バックアップ用にアカウント間で階層を保ったままメールを移動・複写するマ
>>クロを作りました。公開も考えていたのですが、マクロの性質上バグがあったり
>>するとちょっと怖いのでいまいち公開に踏み切れないでいます。

 上記マクロですが、いきなりこのフォーラムのライブラリィに公開するのは怖
いので、ベータ版として下記に置きます。
 
 http://hi-sugar.hp.infoseek.co.jp/down.html
 
 ベータ版であることを了承した上で、興味のあるかたはお試しください。


[ ]