|
GetGrepListWndの間違いのご指摘ありがとうございます。さっそく修正させて
いただきます。
> マクロで DoGrep して、検索結果が 0 件ならそのウィンドウを閉じるようにする
> ことはできるでしょうか?
これはほとんど裏技なんですが、リストボックスにメッセージを送るやり方で
一応うまく出来ました。
DoGrepした直後に
#wnd = dllfunc("GrepListWnd");
として、それでリストボックスのウィンドウハンドルを取得したら、その
ウィンドウに対して、LB_GETCOUNTってメッセージを送るとメール数が分かりま
す。LB_GETCOUNTのメッセージの値は0x018Bなので、
#count = sendmessage( #wnd, 0x018B, 0, 0 ); //LB_GETCOUNT
message "count = " + str(#count);
のようにすると、リストボックスのアイテム数が分かります。
それと、検索結果のウィンドウを閉じるのは、いろいろ試行錯誤したら、とり
あえず以下の方法でうまくいくことが分かりました。
#wnd = dllfunc("GrepWnd");
#n = dllfunc("SetMainWndTop");
#n = sendmessage( #wnd, 0x0111, 2, 0 );
0x0111はWM_COMMANDで、2というのは「IDCANCEL」、すなわちEscキーを押した
時に発生するメッセージを送ってることになります。
"GrepWnd"で取得したウィンドウにいきなりIDCANCELを送信すると、マクロを
実行してる最中に秀丸相当のウィンドウ部品が存在しなくなってしまって保護違
反で落ちたりするのですが、上記のように、一度SetMainWndTopしてから送信す
れば正常に動作します。
サンプルマクロ:
loaddll "tkinfo.dll";
$s = input("検索文字列は?");
$s = dllfuncstr("YenEncode", $s);
#n = dllfunc("SetFindPack", "(\"" + $s + "\", target=subject), inmail=0");
#n = dllfunc("DoGrep", "\\CurrentAccount", "受信", 0);
#wnd = dllfunc("GrepListWnd");
#n = dllfunc("SetGrepWndTop");
#count = sendmessage( #wnd, 0x018B, 0, 0 ); //LB_GETCOUNT
if( #count == 0 ) {
#wnd = dllfunc("GrepWnd");
#n = dllfunc("SetMainWndTop");
#n = sendmessage( #wnd, 0x0111, 2, 0 ); //WM_COMMAND, IDCANCEL
}
|
|