受信後のメールリストのスクロールNo.07895
kurin さん 21/04/07 15:18
 
マクロについて質問です。

メールを受信後に、メール一覧を一番下までスクロールさせることは可能でしょうか。

最新メールを選択するのではなく、選択されているのはあくまで以前のメールで、
メールリストウィンドウのみをスクロールさせるという意味です。

メールの設定は、以下の通りです。

未読メールの閲覧−詳細での「フォルダを切り替えた時に選択するメール」の指定は、
「以前選択していたメール」です。

メール一覧はスレッド表示にしており、「スレッド表示でもソート出来るようにす
る」はチェックしておらず、送受信日時順(新しいメールが一番下)となっています。


[ ]
RE:07895 受信後のメールリストのスクローNo.07896
秀まるお2 さん 21/04/07 16:48
 
 メール一覧の選択状態は変更せずにスクロールだけコントロールすることは可能で
す。

 tkinfo.dllのTitleListWnd関数を使ってメール一覧のウィンドウハンドルが取得で
きるので、そこにsendmessageを使ってWM_VSCROLL,SB_BOTTOMを送る作戦になります。

    loaddll "tkinfo.dll";
    #wnd = dllfunc("TitleListWnd");
    //WM_VSCROLL = 0x0115
    //SB_BOTTOM = 7
    #n = sendmessage( #wnd, 0x0115, 7, 0);

 こんなマクロになります。

 受信フォルダを選択することも必要になるなら、

    loaddll "tkinfo.dll";
    #n = dllfunc("SelectFolder", "", "受信");
    #wnd = dllfunc("TitleListWnd");
    //WM_VSCROLL = 0x0115
    //SB_BOTTOM = 7
    #n = sendmessage( #wnd, 0x0115, 7, 0);

 とすればいいはずなんですが、実はこのマクロうまく動かずです。なぜかというと、
受信フォルダを選択した後に、秀丸メールの方で特殊なタイマーがセットされて、そ
のタイマーによって、遅延して(マクロが終了してから)メール一覧のスクロールが
実行されるからです。

 これを回避するには、いろいろ試行錯誤した所以下のようなマクロにしないとダメ
そうでした。

    loaddll "tkinfo.dll";
    #n = dllfunc("SelectFolder", "", "受信");
    #n = dllfunc("SetAutoPushTimerEver", hidemaruhandle(0), "");
    message "";
    #n = dllfunc("StopAutoPushTimer");
    #wnd = dllfunc("TitleListWnd");
    //WM_VSCROLL = 0x0115
    //SB_BOTTOM = 7
    #n = dllfunc("Bypass_PostMessage", #wnd, 0x0115, 7, 0);

 一瞬メッセージボックスが出て消えるような動作をします。

 こんなマクロを使う作戦でどうでしょうか。

 「マクロ・マクロ登録...」の「自動起動」ページの「受信が一段落した時」に登
録しておく形になります。

[ ]
RE:07896 受信後のメールリストのスクローNo.07903
kurin さん 21/04/08 08:45
 
ご回答ありがとうございました。
教えていただいた方法で試してみます。
うまくいかなかったら、また質問いたします。

[ ]