|
メール一覧表示用のキャッシュの情報を取得できるようにするだけでしたら対応簡単
で非常に高速動作します。それで、実はこれは簡単なので、今日アップロードしたVe
rsion 7.33正式版に隠し関数として追加してしまった所でした。GetMailListCacheっ
て関数追加してしまいました。
パラメータ1は、メール一覧上でのインデックスの値、
パラメータ2は、取得したい情報の種類で、とりあえず、
0番 = Subject:ヘッダ内容
1番 = To/From列のメールアドレス
って風にした所でした。
loaddll "tkinfo.dll";
#index = 100;
$s = dllfuncstr("GetMailListCache", #index, 0);
message "Subject = " + $s;
$s = dllfuncstr("GetMailListCache", #index, 1);
message "email = " + $s;
みたいなサンプルで確認できます。良かったらこれ使ってみてほしいですが・・・
> 今思ったんですが、CurrentHeaderで取得できればいいので、SetMailIndexの内容
>枠非表示モード(一覧内の移動も無し)でもいいです。
DisableDraw関数を使って画面描画させないようにしてループさせても実質同じじゃ
ないかと思いますが、それではダメでしょうか。
テストで、僕の受信フォルダにて以下のマクロを実行したら、350ミリ秒程度でした。
loaddll "tkinfo.dll";
#tick = tickcount;
#n = dllfunc("DisableDraw", 0);
#index_original = dllfunc("MailIndex");
#index = 0;
while( #index < 100 ) {
#n = dllfunc("SetMailIndex", #index);
#index = #index + 1;
}
#n = dllfunc("SetMailIndex", #index_original);
#n = dllfunc("EnableDraw");
#tick = tickcount - #tick;
message str(#tick) + "ミリ秒";
DisabelDraw/EnableDrawをコメントアウトしたら、おおよそ3秒程度になりました。1
0倍とまではいかないですがそれなりに高速にはなってるし、仮にご希望の動作(Set
MailIndexだけど画面上変化なし)にしても、さらに10倍速くなるとかってことは無
いと思います。
速度的に最速でってことを考えるなら、例えばLoadMailByIndexみたいな関数でメー
ルをファイルからロードしてそれを文字列データに格納できて、その後、その文字列
からヘッダの中身を取り出せる、CurrentHeader相当の関数を別途追加してヘッダを
取得できるようにするとか、そういう風にすれば、純粋にファイル読み込み+マクロ
の処理のみの速度にはなるかとは思います。
まとめると・・・・
1.可能なら、最速になるはずのGetMailListCache関数を試してみてほしい。
2.DisableDraw/EnableDraw作戦も、もしまだ試して無い場合は試してみてほしい。
3.それでもダメならLoadMailByIndex関数追加みたいな作戦を考えてもいい。
です。
|
|