GetUnreadMailNum

僕は鶴亀メールを愛用していているのですが、「未読メールがあるかないかしかわからず、総未読メール数は鶴亀メールのウィンドウを開かないとわからない」という不満がありました。ので、マクロを作ってみた。

具体的なソースは以下の通り。これを実行するとダイアログボックスで指定アカウントの未読メール数が表示されます。

// アカウントごとの未読メール数をゲット

$Account = "<アカウント名>";
$Folder  = $Account + "\\<ルートのフォルダ名>";

loaddll "tkinfo.dll";

if (!dllfunc("IsTuruKame")) {
  endmacro;
}

#i = 0;

while ($Folder != "") {
  call GetFolderUnreadMailCount $Folder;
  #i = #i + ##return;
  $Folder = dllfuncstr("GetNextFolder", $Account, $Folder);
}

message str(#i) + "通の未読メールがあります。";

endmacro;

GetFolderUnreadMailCount:
  #x = strstr($$1, "\\");

  if (#x >= 0) {
    $Account = leftstr($$1, #x);
    $Folder  = midstr($$1, #x + 1, 256);
  } else {
    $Account = $$1;
    $Folder  = "";
  }

  #n = dllfunc("GetFolderMailCount", $Account, $Folder, "unread");
  return #n;

GetNextFolderをうまく呼ぶことによってループさせながら、GetFolderMailCountの第3引数をunreadにして呼ぶことにより、各フォルダの未読メールを取得し、加算していくという推移になってます。ゆえに遅いです。

GetNextFolderで返ってくる文字列に、アカウント名も含まれることになかなか気づかなくてハマりました。アカウント名とフォルダ名の切り分けのコードは鶴亀マクロヘルプからパクりました。

このソースではダイアログ・ボックスで表示していますが、僕はTClock Lightのユーザー定義文字列をセットしてやり(tclock.exeをrunで呼んでやるということ)、タスクトレイに文字列として表示させて使ってます。マクロ登録→自動起動で、受信が一段落した時のマクロに指定してやれば良し。

GetFolderMailCountAllとか欲しいな・・・。

なんか設定を見逃してそうな気はしないでもない。設定が多すぎて、そろそろ把握できなくなってきました。どのメーラーでも設定多くて把握しづらいですね。