マクロでの、受信しようとしているアカウNo.10053
nohhoso さん 06/01/07 20:51
 
nohhoso です。

「送受信の開始直前」に起動するマクロ中で、特定のアカウントで
受信しようとしているときにだけ、処理を行いたいと思っています。

そのような判断をする関数を追加することをご検討いただけないでしょうか。
次のような関数だと嬉しいのですが・・・。

#n = IsTransmittingFrom("hoge");

"hoge" アカウントと送受信する直前なら1が返る

[ ]
RE:10053 マクロでの、受信しようとしていNo.10054
山紫水明 さん 06/01/08 09:00
 
 nohhosoさん,こんにちは。

>「送受信の開始直前」に起動するマクロ中で、特定のアカウントで
>受信しようとしているときにだけ、処理を行いたいと思っています。

if( dllfuncstr( "CurrentAccount" ) != "hoge" ) endmacro;

の1行を入れておくことだけでは解決できないことがあるのですね?

     では, (^^)/~
                                        山紫水明
                                        SANSHISUIMEI

[ ]
RE:10054 マクロでの、受信しようとしていNo.10055
nohhoso さん 06/01/08 23:10
 
山紫水明 さん

コメントありがとうございます。

>if( dllfuncstr( "CurrentAccount" ) != "hoge" ) endmacro;
>の1行を入れておくことだけでは解決できないことがあるのですね?

そうですね。これでは、現在選択しているアカウントで送受信を
行う場合にしか対応できないと思います。
選択状態とは関係なく、定期受信や「すべて送受信」の場合に、
あるアカウントが送受信の対象かどうかの判定をしたいのです。

[ ]
RE:10055 マクロでの、受信しようとしていNo.10060
秀まるお さん 06/01/10 17:00
 
 対応するとしたら、各アカウント毎の、一番最後に実行した受信/送信の時刻
をどこかで覚えておくようにして、それが「直前の送受信開始時刻」と比較して
前か後かっていう判定をすることになると思いますが。

 現状で、アカウント毎の情報はaccount.binというファイルに覚えておいてる
だけでして、メモリ上にはずっと常駐させてる訳でもなくて、ちょっと難しい面
があります。

 account.binファイルにそういう時刻も覚えるようにすると、送受信する度に
ファイルのタイムスタンプが書き変わることになって、それはそれてコアなユー
ザー様から苦情が来ます。(昔そういう話がありました)

 何か適当な仕組みを考えて対応したいと思います。

[ ]
RE:10060 マクロでの、受信しようとしていNo.10061
秀まるお さん 06/01/10 17:30
 
 やっぱり、特別な関数の追加はやめます。現状のtkinfo.dll関数をうまく駆使
すればなんとかなることが分かりましたので。

 使う関数としては、GetTransmitCommandCodeと、LoadAccountProp,
GetAccountProp関数です。

 例えば、"AAA"というアカウントがあったとして、それについての「受信」動
作が直前に実行されたかどうかを知るサンプルはこうなります。

    #c = dllfunc("GetTransmitCommandCode");
    #t = 0;
    if( #c == 4003 || #c == 40216 ) {
        if( dllfuncstr("CurrentAccount") == "AAA" ) {
            #target = 1;
        }
    } else if( #c == 40024 || #c == 40143 || #c == 1 ) {
        #n = dllfunc("LoadAccountProp", "AAA");
        if( #c == 1 ) {
            #t = !dllfunc("GetAccountProp", "fExcudeFromAutoDown");
        } else {
            #t = !dllfunc("GetAccountProp", "fExcudeFromAllTransmit");
        }
    }
    if( #t ) {
        message "AAAアカウントの受信が実行されました。";
    }

 ってな感じでいいと思います。(実際に動かしてテストした訳じゃないです
が)

[ ]
RE:10061 マクロでの、受信しようとしていNo.10062
nohhoso さん 06/01/11 02:14
 
nohhoso です。

ご回答ありがとうございます。
早速試してみました。

「すべて送受信」のとき、「すべて送受信」の対象にしていないアカウントでも、受
信の対象だと判断されてしまいます。

調べてみたところ、dllfunc("GetAccountProp", "fExcudeFromAllTransmit") の戻り
値が、
選択の状態にかかわらず、常に0でした。
LoadAccountProp の戻り値が0でないことは確認しました。

ご確認いただけないでしょうか。

# ただ、これが正常に動いても、別のアカウントを選んでいるときに
# アカウント指定で受信されると、判定できないという問題はありますね・・・。

[ ]
RE:10062 マクロでの、受信しようとしていNo.10063
秀まるお さん 06/01/11 09:49
 
 こちらではうまく、fExcludeFromAllTransmitの値が返ってくるようです。

 以下のマクロを、「すべて送受信」の対象アカウントとそうでないアカウント
とで実行してみて、対象アカウントでは0となり、対象でないアカウントでは1と
なります。

    loaddll "tkinfo.dll";
    $a = dllfuncstr("CurrentAccount");
    #n = dllfunc("LoadAccountProp", $a);
    #n = dllfunc("GetAccountProp", "fExcludeFromAllTransmit");
    message str(#n);

 どうでしょ?

[ ]
RE:10063 マクロでの、受信しようとしていNo.10065
nohhoso さん 06/01/12 01:40
 
nohhoso です。

2つめにご呈示いただいたコードでは、正常に動作しました。
両方を見てみると、1つめの方が "fExcudeFromAllTransmit" となっていて
綴りが違っていたんですね。(^_^;

マクロヘルプも見ながらコードを見てたんですが、気付きませんでした。

とりあえず、これで希望のことはできそうです。
いつも素早いコメントありがとうございます。

[ ]
RE:10065 マクロでの、受信しようとしていNo.10066
秀まるお さん 06/01/12 08:55
 
> 両方を見てみると、1つめの方が "fExcudeFromAllTransmit" となっていて
> 綴りが違っていたんですね。(^_^;

 すみません。僕も全然気づきませんでした。

 綴りミスでもエラーにならないのもよくないですけど。直せたら直します。

[ ]