送受信処理を実施したアカウント情報の取No.10667
プックン さん 06/12/15 02:11
 
送受信処理を実施したアカウント情報の取得について

(1)一つのアカウントで送受信された
(2)すべて送受信系コマンドで実施された
(3)アカウントグループを選択して、送受信された
(4)定期受信で受信された
のどれを実施されたものなのか判別する方法はないものかなと調べていたら
GetTransmitCommandCodeというのがあるのに初めて気づきました。

(1),(2),(3)は下記のような方法で送信、受信を実施したアカウントを特定
できるかなと考えました。
定期受信で受信したアカウントを特定する方法がよくわかりませんでした。
GetAccountPropのfExcludeFromAutoDownで受信したアカウントを特定できるかなと
おもったのですが、"何回に1回の割合で対象とするか"を設定していた場合、
どのアカウントで実施したのかわかりません。
どのようにすれば、受信したアカウント情報を取得できるでしょうか?。
回答よろしくお願いいたします。

どのアカウントで送受信を実施されたかどうかの情報を取得するのに、
(1)の場合は、
は、CurrentAccountでわかると認識しています。
 $$account = dllfuncstr( "CurrentAccount" );
 message "実施アカウント=" + $$account ;
(2)の場合は、すべてのアカウントでGetAccountPropを利用して
"すべて送受信"の対象であるかどうかを判別すれば、どのアカウントで
受信処理をしたのか取得できると認識しています。
 ##cnt = 0;
 while( 1 ) {
  $$account = dllfuncstr( "Account", ##cnt );
  if( $$account == "" ) break;
  ##n = dllfunc("LoadAccountProp", $$account );
  //LoadAccountProp関数でメモリ上にロードされたプロパティを
  //GetAccountProp関数で参照できます。
  //秀丸メール本体上でもエディタ上ででも実行可能です。
  //このアカウントを「すべて送受信」の対象外とするかどうかのフラグ
  //1の時に対象外となる
  ##n = dllfunc("GetAccountProp","fExcludeFromAllTransmit")
  if(##n ==0){
   message "実施アカウント=" + $$account ;
  }
  
  ##cnt = ##cnt + 1;
 }
(3)の場合は、CurrentAccountGroupの情報で、どのアカウントで受信したのか
取得できると認識しています。
 $$s = dllfuncstr("CurrentAccountGroup");
 $$a = dllfuncstr( "CurrentAccount" );
 //CurrentAccountGroup情報が取得できたand
 //CurrentAccount情報が無しの場合、アカウントグループが選択されて処理されたと
 //判断する
 if( ($$a == "") &&
   ($$s != "")){
  ##cnt = 0;
  while( 1 ) {
   $$account = dllfuncstr( "Account", ##cnt );
   if( $$account == "" ) break;
   ##n = dllfunc("LoadAccountProp", $$account );
   //LoadAccountProp関数でメモリ上にロードされたプロパティを
   //GetAccountProp関数で参照できます。
   //秀丸メール本体上でもエディタ上ででも実行可能です。
   //このアカウントを「すべて送受信」の対象外とするかどうかのフラグ
   //1の時に対象外となる
   $$wk = dllfuncstr("GetAccountProp","szAccountGroup") ;
   if($$s == $$wk){
    message "実施アカウント=" + $$account ;
   }
   
   ##cnt = ##cnt + 1;
  }
 }

[ ]
RE:10667 送受信処理を実施したアカウントNo.10668
秀まるお さん 06/12/15 09:29
 
 どのアカウントに対して受信動作したのか調べる手段は無いです。

 CurrentAccount関数で調べるとしても、受信を開始した時点で選択してたアカ
ウントと終了時点で選択してるアカウントが違ってる可能性もあるので、あてに
出来ないです。

 StartTransmitCustom関数で受信するケースも考えるともっとややこしいです。

 どっちにしてもブックンさんのやりたいことを実現するには、何らかのマクロ
関数の追加が必要だと思いますけど、どうしましょ?。仮に完全な情報が必要だ
ということなら、StartTransmitCustom関数のパラメータで渡すような形式の文
字列を返す関数を用意することになるし、単純に「どのアカウントで実行した」
または「どのアカウントグループで実行した」ってことが分かればいいのなら、
そのアカウント名またはグループ名を返す関数を用意するだけで済みますけど。

[ ]
RE:10668 送受信処理を実施したアカウント情報の取得についてNo.10671
プックン さん 06/12/19 23:55
 
> どのアカウントに対して受信動作したのか調べる手段は無いです。

そうですか。うーん。

>
> CurrentAccount関数で調べるとしても、受信を開始した時点で選択してたアカ
>ウントと終了時点で選択してるアカウントが違ってる可能性もあるので、あてに
>出来ないです。

そうですよね。昨日はじめて気づきました。


> StartTransmitCustom関数で受信するケースも考えるともっとややこしいです。

さらに、そこまで考えるとややこしいですね。

何がしたいかといいますと、わたしが作ったマクロで
"スケジュールメールOpenマクロ Ver1.01"があります。
このマクロの動作で、
自動起動のマクロ登録で、
 秀丸メール起動時の自動実行の場合
 秀丸メール終了時の自動実行の場合
 受信が一段落した時の自動実行の場合
 送信用のエディタ起動時
 あとで送信/今すぐ送信の自動実行の場合
 送受信の開始直前の自動実行の場合
があります。各アカウントごとに設定情報をiniファイルから取得するように
つくっていて、各アカウントの情報からiniファイルの場所を指定しています。
 $account = dllfuncstr("ExecAtMain", "CurrentAccount") ;
 $$ini = dllfuncstr("HomeDir") + $account + "\\puku.ini" ;
それぞれのアカウントごとに設定できたらいいかなと、考えてそれぞれの
アカウントの情報を参照できるようにという思想でつくっています。

勘違いであったんですが、
昨日まで、定期受信とかアカウントグループとかで受信したときなど
複数のアカウントで同時に処理を実施したときは、それぞれのアカウントで
自動起動のマクロが実施されているのかなと認識していました。
 複数受信した場合、
 アカウント1
 アカウント2
  ・
  ・
 アカウントn
 処理終了後、送受信したアカウントそれぞれで自動起動に定義したマクロが実行
 するのかな〜と思っていました。
それはまちがいで、処理が終了したとき"CurrentAccount"でアカウント
情報を取得すると1個のアカウトしか処理していないのに気づきました。

私は、グループアカウントを作成して使用していなかったので気づかなかった
のですが、グループアカウントを選択して、"受信"を実施したりすると
アカウント情報が取得されないのに、マクロの使用者さんから連絡をいただいて
気づきました。

1個のアカウントでマクロを実行する上では、CurrentAccountで取得したアカウント
情報ごとにiniファイルを持って、設定情報を取得するという動きは、それなりに
いいのですが、複数アカウントを同時に実施したときに、それぞれのアカウントで
マクロを実行したい場合とかに、どうすればいいのだろうかな〜ということで、
今回の質問をさせていただきました。

> どっちにしてもブックンさんのやりたいことを実現するには、何らかのマクロ
>関数の追加が必要だと思いますけど、どうしましょ?。仮に完全な情報が必要だ
>ということなら、StartTransmitCustom関数のパラメータで渡すような形式の文
>字列を返す関数を用意することになるし、単純に「どのアカウントで実行した」
>または「どのアカウントグループで実行した」ってことが分かればいいのなら、
>そのアカウント名またはグループ名を返す関数を用意するだけで済みますけど。

(1)一つのアカウントで送受信された
(2)すべて送受信系コマンドで実施された
(3)アカウントグループを選択して、送受信された
 アカウント名またはグループ名がわかる関数というので分かると便利ですが、
 (1)-(3)はマクロで調べれば、どのアカウントで実施したかわかるので、対応に
 ついてはどちらでもいいです。
(4)定期受信で受信された
 定期受信だと、アカウントグループではなく、個別のアカウントごとで実施され
 るので、アカウント情報が分かるようにしていただけると助かります。
(5)StartTransmitCustom
 このときまで対応していただくとややこしそうなので、あまり必要ないです。

[ ]
RE:10671 送受信処理を実施したアカウント情報の取得についてNo.10678
秀まるお さん 06/12/22 15:11
 
 では、直前に送受信処理した対象アカウントの一覧をコンマ区切りで返す関数
を追加予定とさせていただきます。(関数名などの詳細は作りながら考えるとい
うことで)

[ ]