検索フォルダ情報のcopyについてNo.01774
プックン さん 09/04/25 16:30
 
秀まるおさまこんにちは。

新しい機能の"検索フォルダ"を試しに使い始めまして
とても便利で重宝しています。

"検索フォルダ"関連で教えていただきたい点があります。
バックアップのお手伝いで、"検索フォルダ"があるアカウントをバックアップ
すると正常にバックアップしたアカウントに"検索フォルダ"が作成されます。
作成処理メッセージ
    処理中 - 受信\Receive\debug1(   0 /    0) 完了
    処理中 - 受信\Receive\debug2(   0 /    0) 完了

バックアップを実施したアカウントの"検索フォルダ"をエクスプローラで
みてみると"prop.bin"というファイルがありました。

新しい機能に対してちゃんとバックアップされているな〜と関心していました。
別アカウントの同じフォルダ名を作成して"prop.bin"をcopyしたら検索フォルダ
になりました。なにかこのファイルに検索フォルダの情報をもっているのだろう
というのがわかりました。
中身をエディタでのぞいてみたところ、検索フォルダで指定した"検索条件の式",
"検索対象フォルダ"が記載されているのを見ることができました。

ここで確認させていただきたいのですが、マクロで検索フォルダを
異なるアカウントにcopyをしたいと思ったのですが、どのようにすれば
できますでしょうか?。
方法1.
 検索フォルダであることがわかれば、力技で田楽dllなどを利用して"prop.bin"
 をcopyしてしまう。
 検索フォルダであるのを判別する方法は思い浮かびません。検索フォルダでない
 フォルダの下にあるファイルサイズ2kと検索フォルダの下にあるファイルサイズ
 4kが検索フォルダのほうが少し大きいのでそれで判別?とかするのかな?
方法2.
 "検索条件の式","検索対象フォルダ"をマクロで情報を取得。マクロMakeFolderで
 フォルダを作成後、取得した検索フォルダの情報を元にマクロで検索フォルダを作成。
 (現状可能なのか不明)
方法3.
 その他、思い浮かびませんが何かほかの方法ありますでしょうか?。

[ ]
RE:01774 検索フォルダ情報のcopyについてNo.01776
秀まるお さん 09/04/27 16:43
 
 検索フォルダのフォルダ自体のコピーと、それから「バックアップのお手伝
い」の時に検索フォルダが普通のフォルダになってしまうということで、それは
それで修正したいと思います。

 それと、今現在のフォルダが検索フォルダかどうか調べる関数も今のところ無
いと思うので、それも追加したいと思います。

 他に必要な物があれば連絡ください。

[ ]
RE:01776 検索フォルダ情報のcopyについてNo.01777
プックン さん 09/04/27 20:12
 
回答ありがとうございます。

> 検索フォルダのフォルダ自体のコピーと、

検索フォルダのコピーという処理は私はしていません。
マクロでフォルダ名を取得して同じものを別のアカウントに作成する処理を実施した
だけです。
具体的には、本日マクロライブラリに登録していただいた"メールデータマージマク
ロ Ver1.00"で"バックアップのお手伝い"で作成したフォルダをマージするときにフ
ォルダが無いときに同じ階層のフォルダを作成する処理を実施しました。

>それから「バックアップのお手伝
>い」の時に検索フォルダが普通のフォルダになってしまうということで、

私の文章がわかりにくい書き方だったようで誤解を招いたようです。わかりにくい説
明ですみません。
>新しい機能に対してちゃんとバックアップされているな〜と関心していました。
バックアップのお手伝いは、正常に動作して検索フォルダになっています。何の問題
も無く検索フォルダに対応しています。


> それと、今現在のフォルダが検索フォルダかどうか調べる関数も今のところ無
>いと思うので、それも追加したいと思います。

もし可能であれば、下記関数の作成を希望します。
あればいいなと思う関数
1.↑フォルダが検索フォルダかどうかを調べる関数
2.検索フォルダの設定情報"検索条件の式","検索対象フォルダ"を取得する関数
3.検索フォルダを作成する関数

よろしくお願いいたします。

[ ]
RE:01777 検索フォルダ情報のcopyについてNo.01778
秀まるお さん 09/04/28 13:40
 
 とりあえず、01771番発言の方にある迷惑メールをなんとかしないといけない
ので、そっちの対策をした物を一回β版としてアップロードしてからこっちの対
応をさせていただこうと思います。

 ものすごい数がこちらに転送されてきてますので。

[ ]
RE:01777 検索フォルダ情報のcopyについてNo.01791
秀まるお さん 09/05/07 09:21
 
 今さらになりますが、一応次のβ版で、対応させていただきます。

 MakeGrepFolder
 GetFolderPropFlags
 GetFolderPropFindPack
 GetFolderPropFindFolder

 関数を追加します。

[ ]
RE:01791 検索フォルダ情報のcopyについてNo.01797
プックン さん 09/05/09 11:35
 
秀まるお様、対応ありがとうございました。
> MakeGrepFolder
> GetFolderPropFlags
> GetFolderPropFindPack
> GetFolderPropFindFolder

早速利用させてただいたのですが、自分のマクロに作りこむと
なぜか下記事象になります。アドバイスよろしくお願いいたします。

DEBUG1.MACでの事象:
ぱっと見た目は、検索フォルダのようにみえるが実際には通常のフォルダができあが
ってしまいます。

 [1]MakeGrepFolderでフォルダは作成される。
 [2]作成されたフォルダのアイコンは検索フォルダ。
 [3]"フォルダの設定"で情報を参照すると通常のフォルダの情報のようにみえる。
 [3]MakeGrepFolderで指定したパラメータ2で設定した検索条件の式が、
 "フォルダ設定"-"新規メール時の宛先"になっている。
 [4]ほかのフォルダからメールを作成したフォルダに移動すると移動できる。

DEBUG1.MACの前にはメール作成.MACで検索対象のメールを作成してください。

DEBUG2.MACでアカウントを新規に作成しても同じ事象。
ただしマニュアルで新規にアカウントを作成して"受信\Receive\debug"フォルダ
で"メール作成.MAC","DEBUG1.MAC"を実行すると、検索フォルダが正常に
作成されます。

"メール作成.MAC","DEBUG1.MAC"マクロを実行したフォルダ名="受信\Receive\debug"
環境:
OS:WindowsXPHome
秀丸メール Ver5.16Beta31

//----DEBUG1.MAC
loaddll "TKInfo.dll";

 $$f = "debug1" ;

 ##main = dllfunc("MainWnd" );
 $$c_f = dllfuncstr("ExecAtMain","CurrentFolder" );

 $$sb = "(\"《ABC》.+お知らせ\", regular, nocasesense, target=subject), subf
older=1" ;
 $$sf = "\\CurrentAccount," + $$c_f ;
 ##so = 0x40 ;

 //MakeGrepFolder関数(TKInfo.dll)
 //V5.16β31以降
 //検索フォルダを作成します。
 //これらの関数は秀丸メール本体ウィンドウ上でのみ実行できます。
 ##n = dllfunc("ExecAtMain","MakeGrepFolder",
  $$f,//新規作成するフォルダ名
  $$sb,//検索条件の式
  $$sf,//対象フォルダ
  ##so //検索フォルダのフォルダ毎設定でのオプション
  );

freedll;
endmacro;
//----DEBUG1.MACおわり
//----メール作成.MAC
loaddll "TKInfo.dll";

 ##main = dllfunc("MainWnd" );
 $$c_f = dllfuncstr("ExecAtMain","CurrentFolder" );

 //SetInfoItemFolder関数(TkInfo.dll)
 //情報アイテムの保存先フォルダを指定します。
 ##n = dllfunc("ExecAtMain","SetInfoItemFolder","",$$c_f,1);
 ##i = 0;
 while( ##i < 3 ) {
  //新規メールの作成
  ##n = dllfunc("ExecAtMain","NewMail" );
  //秀丸のハンドルの取得
  ##fh = hidemaruhandle( 0 );
  //SetHeader関数(TkInfo.dll)
  $$s = dllfuncstr("SetHeader", "To", "todo@.item" );
  $$s = dllfuncstr("SetHeader", "Subject", "《ABC》" +
   str(##i) +
   "からのお知らせ" );
  save ; //ファイルの上書き保存
  setactivehidemaru ##main ;
  closehidemaru ##fh ;
  //秀丸のハンドルの取得

  ##i = ##i + 1;
 }
//----メール作成.MACおわり
//----DEBUG2.MAC
loaddll "TKInfo.dll";

##n = dllfunc("MakeAccount", "debug");
##n = dllfunc( "SelectFolder", "debug", "受信" );
##n = dllfunc( "MakeFolder", "Receive");
##n = dllfunc( "SelectFolder", "debug", "受信\\Receive" );
##n = dllfunc( "MakeFolder", "debug");
##n = dllfunc( "SelectFolder", "debug", "受信\\Receive\\debug" );
execmacro macrodir + "\\メール作成.mac" ;
execmacro macrodir + "\\DEBUG1.mac" ;

LEND:
 freedll;
 endmacro;
//----DEBUG2.MACおわり


[ ]
RE:01797 検索フォルダ情報のcopyについてNo.01818
秀まるお さん 09/05/11 09:08
 
 こちらで簡単なテストをした所は再現しなかったんですが、ソースコードを見
直したらダメなパターンが見つかりました。検索フォルダを作成する所のフォル
ダ(親フォルダ)の中にprop.binファイルが存在してない場合にダメでした。

 マクロのMakeGrepFolderじゃなくて普通に検索フォルダを作成した場合もダメ
だったのかなぁと思います。

 ということで修正させていただきます。

[ ]
RE:01818 検索フォルダ情報のcopyについてNo.01819
秀まるお さん 09/05/11 09:14
 
>  マクロのMakeGrepFolderじゃなくて普通に検索フォルダを作成した場合もダメ
> だったのかなぁと思います。

 マクロじゃない場合はたまたまうまく動作していました。バグ状態の再現テス
トも出来ました。

 とにかく修正させていただきます。

[ ]
RE:01819 検索フォルダ情報のcopyについてNo.01825
プックン さん 09/05/11 21:35
 
> マクロじゃない場合はたまたまうまく動作していました。バグ状態の再現テス
>トも出来ました。
>
> とにかく修正させていただきます。
回答ありがとうございます。
早速の確認、対応ありがとうございます。
Ver5.16Beta32で動作確認を実施しました。
期待通りの動作になりました。
ありがとうございました。

[ ]