検索フォルダのリアルタイム更新の停止/再No.01944
プックン さん 09/06/01 21:07
 
秀まるおさま、こんばんは。
検索フォルダで確認させてください。
実施したい動作:
 マクロ実行中に検索フォルダのリアルタイム更新を一時的に停止。
 検索フォルダをマクロで処理
 処理終了後、検索フォルダをのリアルタイム更新を実施

このような動作を実施させるため、指定した検索フォルダのリアルタイム
更新の停止/再開をするようなことは可能でしょうか?。
回答よろしくお願いいたします。

//SetGrepFolderAutoInvalidate関数(TKInfo.dll)
//V5.17β1以降
//SelectFolder関数などで検索フォルダを選択した場合に、
//検索フォルダの中身を無効化するかどうかのモードを切り替えます。
##n = dllfunc( "SetGrepFolderAutoInvalidate", 0);

//GetFolderPropFlags関数
//V5.16β31以降
//フォルダ毎設定での内部的に保持されてるフラグの値を返します。
##n = dllfunc("GetFolderPropFlags");
##flag = ##n & 0x40 ; //検索フォルダで、リアルタイムに更新する
if(##flag == 0x40){
 //検索フォルダを一時的にリアルタイム更新を停止する。
 //該当するマクロがあるのでしょうか?
}

//マクロでの処理

if(##flag == 0x40){
 //検索フォルダを一時的にリアルタイム更新を再開する
 //該当するマクロがあるのでしょうか?
}
freedll;
endmacro;

[ ]
RE:01944 検索フォルダのリアルタイム更新No.01945
秀まるお さん 09/06/02 12:53
 
 検索フォルダのリアルタイム更新を一時的に止める関数を追加する対応はして
もいいですが、リアルタイム更新を再開させるためには、基本的に一覧作成から
やり直ししてもらうって形になると思います。

 ということで、リアルタイム更新を止める関数追加だけなら対応してもいいで
すが、どうでしょ?

[ ]
RE:01945 検索フォルダのリアルタイム更新No.01948
プックン さん 09/06/03 20:11
 
秀まるおさま、回答ありがとうございます。

> ということで、リアルタイム更新を止める関数追加だけなら対応してもいいで
>すが、どうでしょ?
お手数ですが、関数の追加よろしくお願いいたします。

[ ]
RE:01948 検索フォルダのリアルタイム更新No.01958
秀まるお さん 09/06/04 14:44
 
 StopGrepFolderRealtime という関数を追加します。

[ ]
RE:01958 検索フォルダのリアルタイム更新No.01987
プックン さん 09/06/16 02:59
 
> StopGrepFolderRealtime という関数を追加します。
秀まるおさま、対応ありがとうございました。
動作確認してみたのですが、リアルタイム更新の停止処理を実施してくれていないよ
うです。
ご確認よろしくお願いいたします。
動作確認環境
OS:Windows XP Home
秀丸メール Ver5.19Beta1,Beta4

//--debug.mac--
 loaddll "TKInfo.dll";

 //GetFolderPropFlags関数等(TKInfo.dll)
 //V5.16β31以降
 //フォルダ毎設定での内部的に保持されてる
 //フラグの値を返します。返す値はビットをorした値です。
 //0x10=検索フォルダ
 ##n = dllfunc("ExecAtMain","GetFolderPropFlags");
 //検索フォルダで、リアルタイムに更新する場合
 if(##n & 0x40){
  ##realtime = 1 ;
 }
 else{
  ##realtime = 0 ;
 }
 if(##realtime == 1){
  //StopGrepFolderRealtime関数(TKInfo.dll)
  //Ver5.19Beta1以降
  //現在選択している検索フォルダのリアルタイム更新を止める。
  ##n = dllfunc("ExecAtMain","StopGrepFolderRealtime");
  if(##n == 0){
   message
   "account=" + dllfuncstr("ExecAtMain","CurrentAccount" ) +
   "\n" +
   "folder=" + dllfuncstr("ExecAtMain","CurrentFolder" ) +
   "\n検索フォルダのRealTime更新を停止できませんでした。\n" +
   $info ;
  }
 }
 else{
  message "検索フォルダのリアルタイム更新off" ;
 }

LEND:
 freedll;
 endmacro;

//--debug.mac--

[ ]
RE:01987 検索フォルダのリアルタイム更新No.01988
秀まるお さん 09/06/16 12:04
 
 こちらで試した限りは、そのマクロでリアルタイム更新が止まるようです。

 僕の所にはメモ付きメールを対象にする検索フォルダがあります。そこのフォ
ルダを選択すると、メール一覧の[一覧][スレッド]の右側の部分が

   検索フォルダ(リアルタイム更新あり) flag=memo, subfolder=1

 となります。その状態でマクロ実行すると、そこの表示がたしかに

   検索フォルダ flag=memo, subfolder=1

 に変わりまして、たしかにリアルタイム更新が止まったような表示になります。

 その状態で試しに適当なメールのプロパティを開いてメモ内容を削除しても、
そのメールはたしかに検索フォルダ上から消えない、という動作をしてくれまし
たけども…

 マクロを実行した後の、上記のような「検索フォルダ(リアルタイム更新あ
り)」の部分の表示がどうなるのか、一回見てみてほしいです。

[ ]
RE:01988 検索フォルダのリアルタイム更新No.01990
プックン さん 09/06/16 23:56
 
秀まるおさま、回答ありがとうございます。

> マクロを実行した後の、上記のような「検索フォルダ(リアルタイム更新あ
>り)」の部分の表示がどうなるのか、一回見てみてほしいです。

すみません、マクロの動作を勘違いしていたようで
正常に下記のようになりました。

マクロ実行前
    検索フォルダ(リアルタイム更新あり)(".*", regular, nocasesense, target="S
chedule:"), subfolder=1
マクロ実行後
    検索フォルダ(".*", regular, nocasesense, target="Schedule:"), subfolder=1

2回目以降は、
    account=ほげほげ
    folder=対象フォルダ名
    検索フォルダのRealTime更新を停止できませんでした。
となりました。

マクロを実行した後に、検索フォルダの設定を確認すると
検索フォルダの内容をリアルタイムに更新する(M)にチェックが入った
状態でした。

この2回目のメッセージをみて、マクロの動作がおかしい?と判断してました。
勘違いしていたのは、"StopGrepFolderRealtime"関数の挙動が
マクロ実行で、リアルタイム更新停止
マクロが終了したらリアルタイム更新が再開
といった挙動なのかなと勘違いしていました。

>リアルタイム更新を再開させるためには、基本的に一覧作成から
>やり直ししてもらうって形になると思います。
と書いていただいていたのを、すっかり忘れていたようです。

動作確認環境:
    OS:Windows XP Home
    秀丸メールVer 5.19Beta4

[ ]