「n通受信しました」のメッセージとマクロNo.10952
秀まるお2 さん 03/01/27 17:42
 
 受信後のメッセージ表示関係をいじった関係で、受信後のマクロ自動実行のタ
イミングも変わってしまい、少々まずい問題が起きてしまいました。

 例えばですが、

    loaddll "tkinfo.dll";
    if( dllfunc("MainWnd") ) {
        #n = dllfunc("SelectRecvMail");
    }

 というマクロを定期受信後に使っていたとすると、以前は「n通受信しまし
た」のメッセージにOKした場合にだけうまく受信したメールを選択する動作と
なってました。

 ところがV2.35からは、このマクロは「n通受信しました」のメッセージにOKす
るまでもなく実行され、結果として受信したメールが選択されない場合が発生し
ます。

 上記例については、"MainWnd"かどうかの判定を外すことで回避できますが、
他にもまずいケースが出てくるかもしれません。

 今のところ適当な解決策は思いつかないので、とりあえずそういう問題がある
ことだけご承知ください。

[ ]
RE:10952 「n通受信しました」のメッセーNo.10957
ひろ さん 03/01/27 18:30
 
 皆さん今日は、ひろです。
>  ところがV2.35からは、このマクロは「n通受信しました」のメッセージにOKす
> るまでもなく実行され、結果として受信したメールが選択されない場合が発生し
> ます。
 上手い解決方法ではありませんが、私はメッセージ表示自体を OFF にして、
//-------------------------------------------------------------------
#RecvMailCountShow = dllfunc( "RecvMailCountShow");
if( !#RecvMailCountShow ){
  if( dllfunc("Bypass_MessageBox",hidemaruhandle(0),
    "メールが" + str( #RecvMailCountShow ) + "通届いています。",
    "鶴亀メール",0x1024) == 7 )goto End;
}
//-------------------------------------------------------------------
といった処理を使用しています。
 問題は、SetAutoPushTimer 関数を使って、自動で閉じる処理を入れてやら
ないと、ダイアログ・ボックス表示中は、定期的な受信が出来ない点に有りま
す。

[ ]
RE:10957 「n通受信しました」のメッセーNo.10964
秀まるお2 さん 03/01/28 17:22
 
 マクロ実行もしたいし、メッセージ表示もしたいし、メッセージを表示したま
ま定期受信が止まるのもいやだし…。

 何かベストな解決策が無いかといろいろ考えた所、以下の仕様を考えました。

  − 「n通受信しました」のメッセージを表示した場合、原則としてOKかキャ
    ンセルを押すまで、受信後用のマクロは起動しない。
  − OKかキャンセルを押したらマクロを実行する。
  − OKもキャンセルも押さずに次の定期受信の時間がやってきた時は、その時
    点でマクロ実行する。マクロが終了したら定期受信を開始する。

 ってことでどうでしょ?

[ ]
RE:10964 「n通受信しました」のメッセーNo.10969
秀まるお2 さん 03/01/28 17:58
 
 やっぱりこうします。

  − 「n通受信しました」のメッセージを表示した場合、原則としてOKかキャ
    ンセルを押すまで、受信後用のマクロは起動しない。
  − OKかキャンセルを押したらマクロを実行する。
  − OKもキャンセルも押さずに次の定期受信の時間がやってきた時は、マクロ
    実行しないまま次の受信動作を開始してしまう。
  − RecvMailCount関数の返す値は、「n通受信しました」を出したまま実行さ
    れた定期受信での受信したメールの合計数を返すようにする。

 これで従来との互換性も維持しつつ、メッセージ表示しながらの定期受信も出
来ます。

[ ]
RE:10969 「n通受信しました」のメッセーNo.10973
ひろ さん 03/01/28 19:38
 
 秀まるおさん今日は、ひろです。
>   − OKかキャンセルを押したらマクロを実行する。
 マクロでこの [OK], [キャンセル] どちらが押されたか知る方法は有るので
しょうか?

[ ]
RE:10969 「n通受信しました」のメッセーNo.10983
ひろ さん 03/01/29 01:51
 
 秀まるおさん今日は、ひろです。
>   − OKかキャンセルを押したらマクロを実行する。
>   − OKもキャンセルも押さずに次の定期受信の時間がやってきた時は、マクロ
>     実行しないまま次の受信動作を開始してしまう。
 少し気になる点がでてきました。
(1) そもそもこのメッセージを表示する設定を OFF にしているときは、何時
    マクロが実行されるのか?
(2) http://www.maruo.co.jp/hidesoft/8/m030114.html#10666
    http://www.maruo.co.jp/turukame/1/m030120.html#8295
    の流れで、配信予約のマクロを作っていますが、この仕様だと全くマクロ
    を実行されないことがあり得るので、ちょっと困った
    →いつか出ていましたが、定期的に実行するマクロが別指定できると良い
    のかな?

[ ]
RE:10983 「n通受信しました」のメッセーNo.10986
秀まるお2 さん 03/01/29 11:33
 
> マクロでこの [OK], [キャンセル] どちらが押されたか知る方法は有るので
>しょうか?

 OKボタンを押した時は必ず鶴亀メール本体ウィンドウが表に出てくることに
なってます。キャンセルボタンを押した時は、鶴亀メール本体ウィンドウはアク
ティブじゃないです。

 ちなみに、OKボタンもキャンセルボタンも押さずに常駐鶴亀から鶴亀本体を呼
び出した場合には、内部的には「n通受信しました」の所でOKボタンを押したの
と同じ処理をしています。

 ということで、C言語プログラミング的に判定するならば、

   if( GetForegroundWindow() == 鶴亀本体ウィンドウ )

 で判定できますが、マクロからやるとすると、GetForegroundWinodow関数を呼
ぶ手段がありません。しいて必要でしたらtkinfo.dllに
Bypass_GetForegroundWindow関数を追加します。


>(1) そもそもこのメッセージを表示する設定を OFF にしているときは、何時
>    マクロが実行されるのか?

 この場合は従来通り、受信が一段落した直後に毎回必ず実行されます。

>(2) http://www.maruo.co.jp/hidesoft/8/m030114.html#10666
>    http://www.maruo.co.jp/turukame/1/m030120.html#8295
>    の流れで、配信予約のマクロを作っていますが、この仕様だと全くマクロ
>    を実行されないことがあり得るので、ちょっと困った

 「n通受信しました」のメッセージ表示をONにしてる場合は、そもそも以前の
バージョンから、ダイアログボックスに応答するまでマクロ実行されない仕様で
した。なので、特に新しいバージョンだから問題が起きるということは無いはず
です。

[ ]
RE:10986 「n通受信しました」のメッセーNo.10988
ひろ さん 03/01/29 12:19
 
 秀まるおさん今日は、ひろです。
> しいて必要でしたらtkinfo.dllに
> Bypass_GetForegroundWindow関数を追加します。
 いろいろ使い道がありそうなので(^^;、こちらをお願いします。

> >(1) そもそもこのメッセージを表示する設定を OFF にしているときは、何時
> >    マクロが実行されるのか?
>
>  この場合は従来通り、受信が一段落した直後に毎回必ず実行されます。
 一安心。

>  「n通受信しました」のメッセージ表示をONにしてる場合は、そもそも以前の
> バージョンから、ダイアログボックスに応答するまでマクロ実行されない仕様で
> した。
 既にそういった仕様だったんですね。失礼しました。

[ ]