CheckDuplication関数(TKInfo.dll)(Ver7.28対応版)
 CheckDuplication関数は、重複メールのチェックコマンドを実行します。この関数は、メニュー上で「重複メールのチェック」コマンドを実行する場合よりも細かい動作を指定することができます。
 この関数は秀丸メール本体ウィンドウ上でのみ実行できます。
パラメータ1(文字列型)
 CheckDuplication関数の動作についてのモードを指定します。モードの指定は文字列を使い、複数ある場合は"+"記号を使って連結させて指定します。
 たとえば、"batch"と"under"を両方指定したい場合は、"batch+under"と指定します。

 指定できるモードは以下の通りです。
"batch"  重複メールを見つけた時の問い合わせダイアログボックスを出さずに、暗黙のうちに重複メールを削除します。ダイアログボックス中の「1つだけ残すの一括処理」ボタンを押したのと同じ動作となります。
"under" 指定された対象フォルダの配下のフォルダすべてについて「重複メールのチェック」を実行します。こちらのパラメータ指定の方式の場合、同じメールが複数のフォルダにばらばらに存在してる場合は重複扱いとなりません。フォルダをまたがって重複扱いにしたい場合はこの「under」は指定せずに、パラメータ4で追加フォルダとして対象フォルダを指定する必要があります。
"hotonly"  新着メールかどうかのフラグを利用して、重複メールのチェック処理を高速化します。このオプションを指定した場合、新着でないメール間での重複チェックが行われなくなります。 何かメールを受信して、そのメールが重複した物になっているかどうか調べるだけの場合にはこのオプションを指定してください。
"smallretain" 重複メールを「1つだけ残す」とした場合に、普通はサイズの一番大きいメールだけが残りますが、このモードを指定すると、サイズの一番小さいメールだけが残るようになります。
"yesall""  batch"を指定していてもなお出てくる問い合わせメッセージをすべて省略します。それらの問い合わせメッセージに対してすべて「はい」を押したのと同じ扱いにになります。 具体的には、メモ付き/色つき/マーク付きメールが見つかった場合の問い合わせメッセージ、Date:ヘッダが違っている時の問い合わせメッセージを出さなくします。
 モード指定が必要ない場合は、""を指定するか、またはパラメータ自体を省略できます。


パラメータ2、パラメータ3(文字列型)
 パラメータ2およびパラメータ3で、チェック対象のフォルダを指定します。パラメータ2側ではアカウント名、パラメータ3側ではフォルダ名を指定します。
 パラメータ2とパラメータ3の両方を省略した場合(または両方とも""を指定した場合)には、現在選択しているフォルダを対象として動作します。
 パラメータ3のみを省略した場合、パラメータ2で指定したアカウント自体が対象となります(この場合はパラメータ1で"under"が指定されてないとうまく動作しませんが)。


パラメータ4(文字列型)
 重複メールのチェックの一覧表示のモードを指定します。パラメータを省略、または数値の0または""または"each"の文字列を指定すると、重複メール1つ1つを確認するモードになります。"listall"を指定するとすべての重複メールの一覧表示、"listreverse"を指定すると重複してないメールの一覧表示になります。


パラメータ5(文字列型)
 「追加のフォルダ」を文字列で指定します。指定方法は「アカウント名\フォルダ名」のようなフォルダ名の指定をコンマ区切りで複数指定します。フォルダ名の後ろに「*」を付けると、そのフォルダとそのフォルダ配下のすべてのフォルダを対処として指定したことになります。
 パラメータ5を省略すると、追加のフォルダは無しとなります。
 パラメータ5で指定したフォルダが存在しない場合でも特にエラーにはならず、存在しないフォルダを無視して「重複メールのチェック」を実行します。

 追加のフォルダが無い場合はこのパラメータを省略するか、または""を指定してください。
 アカウント名とフォルダ名の区切りの「\」は、"\"のように指定するんじゃなくて"\\"のように指定するようご注意ください。


返り値(数値型)
 パラメータが間違っている場合や何らかのエラーが発生した場合は0を返します。
 重複メールの問い合わせダイアログボックスが出てユーザーがキャンセルした場合は1を返します。この場合、重複メールの一部は削除済みである可能性があります。
 重複メールが無かった場合は2を返します。
 重複メールがあってすべて適当に処理された場合は3を返します。


補足
 通常の「重複メールのチェック」コマンドでは最後に「n 通の重複メールを削除しました」または「重複しているメールはありませんでした」のメッセージが表示されますが、CheckDuplication関数呼び出しの場合は何も表示されません。


#n = dllfunc( "CheckDuplication", "batch" );
    // 現在フォルダの重複メールチェック、自動処理
#n = dllfunc( "CheckDuplication", "batch", dllfuncstr("CurrentAccount") );
    // 現在アカウント全体の重複メールチェック
#n = dllfunc( "CheckDuplication", "under+batch+hotonly", "TestAccount", "ML" );
    // 特定フォルダ配下(たとえばメーリングリスト用のフォルダ全体)についての重複メールチェック
#n = dllfunc( "CheckDuplication", "", "", "", "listall", dllfuncstr("CurrentAccount") + "\\" + dllfuncstr("CurrentFolder") + "*" );
    // 現在フォルダと配下のフォルダを総括して重複メールチェック。重複メールのすべてを一覧表示。
備考
 メーリングリストなどの特定の種類のメールが重複して受信してしまうことがある場合には、受信が一段落した時用のマクロを適当に登録し、そのマクロ内でCheckDuplication関数を実行すると便利です。この場合、モード指定で"batch+hotonly"を指定するといいです。

 重複メールのチェックでの「重複してるかどうかの判定基準」、「『1だけ残す』で残すメールの決定方法」のおぷしょんの指定は、CheckDuplication関数呼び出しの前に、SetDuplicationCheckOption関数を呼び出して指定してください。