マクロで検索フォルダを選択したい。No.01869
m3snow さん 09/05/21 16:40
 
受信時にメールを各フォルダに振り分け、検索フォルダ(リアルタイム更新あり)で、
最近の新着メール一覧を作成して利用しています。

この検索フォルダを、受信が一段落した時の自動起動マクロで選択したいです。

V5.16では、SelectFolder関数を使って検索フォルダを選択した時には、「中断」
となり何も表示されない仕様になっています。

秀丸メールβテスト サポートフォーラム/秀丸めーる・バグ関係のNo.01945より、

> ただし、今後、検索フォルダにも配慮したマクロを作成することも可能にした
>いという話が出てくるかもしれないので、その場合は、検索フォルダをマクロで
>選択して中身を調べたりってことも出来るような関数追加なんかは考えたいと思
>います。

を見つけました。検索フォルダ(リアルタイム更新あり)を選択できるマクロについて、
要望をお願いします。
#今回は、マクロで、秀丸メール本体で検索フォルダの選択し、その検索フォルダの
内容を表示する機能のみの要望です。

[ ]
RE:01869 マクロで検索フォルダを選択したNo.01870
秀まるお さん 09/05/21 16:54
 
 実は今日アップロードしたV5.17β2にて、

    SetGrepFolderAutoInvalidate

 という関数を追加しています。それをマクロの最初で呼び出せば、検索フォル
ダが普通に選択出来ます。

    loaddll "tkinfo.dll";
    #n = dllfunc("SetGrepFolderAutoInvalidate", 0);

 とすればいいです。

[ ]
RE:01870 マクロで検索フォルダを選択したNo.01876
m3snow さん 09/05/21 21:47
 
> 実は今日アップロードしたV5.17β2にて、
>
>    SetGrepFolderAutoInvalidate
>
> という関数を追加しています。それをマクロの最初で呼び出せば、検索フォル
>ダが普通に選択出来ます。

V5.17β2にて、SetGrepFolderAutoInvalidateを使用し、検索フォルダが選択出来ま
した。
大変便利になりました。ありがとうございました。

[ ]
RE:01876 マクロで検索フォルダを選択したNo.01883
さん 09/05/22 13:35
 
石です。便乗ですみません。

SelectFolder関数で検索フォルダを選択出来るようになりましたが、秀丸メール起動
直後、受信フォルダなどを選択している状態で検索フォルダをSelectFolder関数で選
択してもメールは表示されないです。
もし可能でしたら対応していただけるか検索フォルダの再検索コマンドをマクロ上で
実行出来るようにしていただけるとありがたいです。

[ ]
RE:01883 マクロで検索フォルダを選択したNo.01885
秀まるお さん 09/05/22 14:07
 
 検索フォルダの再検索をするには、マクロでやるとしたら、

    loaddll "tkinfo.dll";
 #n = dllfunc("Bypass_PostMessage",hidemaruhandle(0),0x111,40039,0);

 のようにする手があります。それでどうでしょ?

 #n = sendmessage( hidemaruhandle(0),0x111,40039,0);

 だとダメなんですが、これがしいて必要でしたら対応したいと思います。それ
と、検索フォルダの結果が完成してるのかどうかを返す関数がありませんけど、
これも必要なら作ってもいいです。

[ ]
RE:01885 マクロで検索フォルダを選択したNo.01887
さん 09/05/22 19:48
 
石です。

うまくいきました。
ありがとうございました。

[ ]
RE:01885 マクロで検索フォルダを選択したNo.01938
プックン さん 09/05/27 20:32
 
秀まるおさま、こんばんは。

m3snowさん、横から失礼します。

> 検索フォルダの再検索をするには、マクロでやるとしたら、
>
>    loaddll "tkinfo.dll";
> #n = dllfunc("Bypass_PostMessage",hidemaruhandle(0),0x111,40039,0);

>と、検索フォルダの結果が完成してるのかどうかを返す関数がありませんけど、
>これも必要なら作ってもいいです。

検索フォルダの状態を取得する関数を使えたら便利なのですが、上で書かれている関
数を作成していただけませんでしょうか。

dllfunc("Bypass_PostMessage",hidemaruhandle(0),0x111,40039,0);
でうまく動作しているので、状態を取得して検索フォルダの再検索とかを実施したい
と考えています。
検討よろしくお願いいたします。

[ ]
RE:01938 マクロで検索フォルダを選択したNo.01941
秀まるお さん 09/05/28 14:58
 
 では、GetGrepFolderStateとIsGrepProceesingって関数を追加します。

■GetGrepFolderState, IsGrepProcessing関数(TKInfo.dll)

     GetGrepFolderState関数は、パラメータで指定された検索フォルダの現在
    の状態を返します。
     IsGrepProcessing関数は、今現在、検索フォルダの一覧作成または「検索
    して一覧作成」を実行している最中かどうかを返します。


■パラメータ1(文字列型、GetGrepFolderState関数)
     対象フォルダのアカウントを指定します。または現在選択してるフォルダ
    に対しての状態を取得したい場合は数値の0を指定します。(またはパラ
    メータ自体を省略してもいいです)

■パラメータ2(文字列型、GetGrepFolderState関数)
     対象フォルダのフォルダ名を指定します。または現在選択してるフォルダ
    に対しての状態を取得したい場合は数値の0を指定します。(またはパラ
    メータ自体を省略してもいいです)

■返り値(数値型、GetGrepFolderState関数)
     指定されたフォルダが存在しなかったり検索フォルダじゃない場合は0を
    返します。
     指定されたフォルダがたしかに検索フォルダだけども検索フォルダとして
    動作していない(おそらくリアルなメールが存在している)場合は1を返し
    ます。
     検索が開始される前の待機状態(フォルダが選択されて、一覧作成をス
    タートさせるためのタイマーをセットしただけの状態)の場合は2を返しま
    す。
     検索フォルダで何か矛盾が発生して中身が壊れた状態になってるか、また
    は意図的に無効にされた場合の時は3を返します。
     検索フォルダの一覧作成が途中で中断してる状態の場合は4を返します。
     検索している最中の場合は5を返します。
     検索フォルダの一覧が完成している場合は100を返します。

■返り値(数値型、IsGrepProcessing関数)
     検索関係の処理を何も実行してない時は0を返します。
     「検索して一覧作成」等の、検索結果ウィンドウを別に出す処理用の検索
    処理をしている最中は1を返します。
     検索フォルダの一覧作成をしている最中は2を返します。
     検索フォルダの一覧作成をしている最中の場合にマクロを実行した場合、
    そのマクロは一覧作成の最中に割り込み的に実行されていることを表してま
    して、その場合はマクロから検索フォルダの一覧作成を指示させることは出
    来ません。(call-returnのネストの関係上どうしてもそうなります)

■テストマクロ

   loaddll "tkinfo.dll";
   #n = dllfunc("SetGrepFolderAutoInvalidate", 0);
   #n = dllfunc("GetGrepFolderState");
   #f = dllfunc("IsGrepProcessing");
   message "GetGrepFolderState = " + str(#n) +
            "\nIsGrepProcessing = " + str(#f);
   message str(#n);
   if( #n != 0 && #n < 100 ) {
       #n = sendmessage( hidemaruhandle(0),0x111,40039,0);
       message "完成";
   }

[ ]
RE:01941 マクロで検索フォルダを選択したNo.01942
プックン さん 09/05/29 23:54
 
> では、GetGrepFolderStateとIsGrepProceesingって関数を追加します。
V5.18 Beta4で動作することを確認しました。
対応ありがとうございました。

[ ]