dllfunc("SetMailIndex",0);No.02880
"y.iida" さん 01/01/06 16:12
 
メールがないフォルダで実行しても 1(成功)を返します。
こいつが失敗を返すのは、メールが入らないアカウントフォルダだけ?

で、何回も発生してますけど(messageで止めてるのが悪い?)
例えば
 #n =dllfunc("SetMailIndex",0);
 message str(#n);
 ・・・
とか、やってるとメッセージが出てOKして
そのままお亡くなりになる時があります。
(フリーズする時と一覧に何も出なくなる時とあります
 どちらも終了はできないです)
(結局、強制終了させるとList.binが行ってしまう・・・)
ソース的に何かあります?(後ほど他の環境でも実験してみますけど)

(独り言)
当たり前なんですけど、既読→未読が0秒の設定だと、
 #unread =dllfunc("IsUnread");
って、意味がないんですね。
移動したら瞬間既読、まぁ、仕様ですね。
ん〜ん、先頭未読の制限にしてしまおう。

[ ]
RE:02880 dllfunc("SetMailIndex",0);No.02912
秀まるお さん 01/01/08 17:04
 
>メールがないフォルダで実行しても 1(成功)を返します。
>こいつが失敗を返すのは、メールが入らないアカウントフォルダだけ?

 エラーチェックしてませんでした。選択できない場合は0を返すように修正します。

>で、何回も発生してますけど(messageで止めてるのが悪い?)
>例えば
> #n =dllfunc("SetMailIndex",0);
> message str(#n);
> ・・・
>とか、やってるとメッセージが出てOKして
>そのままお亡くなりになる時があります。

 手元のバージョンで簡単なテストをした限りは再現しないようです。僕がやったの
は、単純に、

        loaddll "tkinfo.dll";
        #n = dllfunc("SetMailIndex", 0 );
        message str(#n);

 という3行だけのマクロをメールのあるフォルダや無いフォルダなどで繰り返し実
行したみただけですけど、それだけでは起きないようです。何かもっと具体的に再現
させるマクロと手順を教えてほしいです。

[ ]
RE:02912 dllfunc("SetMailIndex",0);No.02919
"y.iida" さん 01/01/08 19:03
 
> >とか、やってるとメッセージが出てOKして
> >そのままお亡くなりになる時があります。
>
>  手元のバージョンで簡単なテストをした限りは再現しないようです。僕がやったの
> は、単純に、
>
>         loaddll "tkinfo.dll";
>         #n = dllfunc("SetMailIndex", 0 );
>         message str(#n);
>
>  という3行だけのマクロをメールのあるフォルダや無いフォルダなどで繰り返し実
> 行したみただけですけど、それだけでは起きないようです。何かもっと具体的に再現
> させるマクロと手順を教えてほしいです。


loaddll "tkinfo.dll";

// ☆↓↓↓☆ これが臭いです
#n = dllfunc("DisableDraw",1);

// ここは関係ないと思う
#IsThreadView_sv =dllfunc("IsThreadView");
if ( #IsThreadView_sv ){// スレッド表示
#n =dllfunc("SetThreadView",0);// 一覧に戻す
}
#Mail_no_sv= dllfunc("MailIndex");
if ( #IsThreadView_sv ){
#n =dllfunc("SetThreadView",1);// スレッドへ戻す
}

#n = dllfunc("SetMailIndex", 0 );
message str(#n);

・・・・

これでどうでしょう。
100%では無いのですが、やはり起きます。

[ ]
RE:02919 dllfunc("SetMailIndex",0);No.02938
秀まるお さん 01/01/09 10:12
 
 このマクロだと、DiableDrawされっぱなしになってます。tkinfo.dllのEnableDraw
/DisableDrawは、秀丸のenabledraw/disabledrawと違って必ず最後にEnableDrawして
おかないといけない仕様です。

 ってことで、おかしくなっても仕方がないです。

[ ]
RE:02938 dllfunc("SetMailIndex",0);No.02943
"y.iida" さん 01/01/09 10:52
 
> このマクロだと、DiableDrawされっぱなしになってます。

お送りしたやつですよね?
だとすると、どこかでやると思うけど・・

で、もって、お送りしたやつでは
#n =dllfunc("SetMailIndex",0); が、1を返すから
#unread =dllfunc("IsUnread"); に行って、
そのまま死ぬって時があるようにも思えます。

#n =dllfunc("SetMailIndex",0);

message str(#n); //★★★★★★

if (#n == 1) { // 成功
#unread =dllfunc("IsUnread");

message str(#unread); //★★★帰ってこない
・・・


で、汚ないのは分かっているのでケツのfreedllの前に
 #n = dllfunc("EnableDraw");
を必ず入れても変わらないし・・・

さらに赤恥モードか?

[ ]
RE:02943 dllfunc("SetMailIndex",0);No.02962
秀まるお さん 01/01/09 14:21
 
> お送りしたやつですよね?
> だとすると、どこかでやると思うけど・・

 そのようなメールが届いていたとは全然知りませんでした。(飯田さん用フォルダ
が常に未読状態になっていて…)

 さっそくテストしてみます。

[ ]
RE:02962 dllfunc("SetMailIndex",0);No.02966
秀まるお さん 01/01/09 15:57
 
 で、テストしてみたら再現しました。んでもって修正しました。

 DisableDraw中にMessageBoxを出したり秀丸マクロが長時間ループしたりするとWM_
PAINTを無限に送り続けてしまうのでした。あと、EnableDrawした時にメール一覧が
再描画されないことがあるバグも修正しました。

[ ]
RE:02966 dllfunc("SetMailIndex",0);No.02968
"y.iida" さん 01/01/09 16:21
 
> で、テストしてみたら再現しました。んでもって修正しました。
>
> DisableDraw中にMessageBoxを出したり秀丸マクロが
> 長時間ループしたりするとWM_PAINTを無限に送り続けてしまうのでした。
>あと、EnableDrawした時にメール一覧が再描画されないことが
>あるバグも修正しました。

何度やっても再現条件が分からなかったので、
ともかく犯人が分かって修正も終えたようで良かったです。

[ ]