スレッドの先頭に行くには?No.42692
styth さん 12/05/17 12:56
 
 マクロで、スレッドの先頭に行くにはどう書けば良いんでしょうか?
 ヘルプで、「スレッド 先頭」で検索しましたが、ありませんでした。
 よろしくお願いします。

[ ]
RE:42692 スレッドの先頭に行くには?No.42694
秀まるお2 さん 12/05/17 13:32
 
 スレッドの先頭に移動する(スレッドの先頭を選択する)コマンドは無いので
すが、マクロで実現は出来ました。

    loaddll "tkinfo.dll";
    if( dllfunc("IsThreadView") != 1 ) {
        endmacro;
    }
    while(1) {
        #level = dllfunc("GetThreadLevel");
        if( #level == 0 ) {
            break;
        }
        #n = dllfunc("NextPrevCustom", "", "up", "", "");
        if( #n == 0 ) {
            break;
        }
    }

 これでどうでしょうか。

 メールを選択しただけで未読/既読切り替えする設定になっていると、途中で
選択されるメールが既読に切り替わってしまう恐れがあるのが欠点ですけども。

[ ]
RE:42694 スレッドの先頭に行くには?No.42696
styth さん 12/05/18 09:05
 
ありがとうございます。
できました。

[ ]
RE:42692 スレッドの先頭に行くには?No.42701
Tetchiro さん 12/05/18 12:11
 
いちユーザーのTetchiroです。

シミュレートキーを使う方法も有りではないでしょうか。

 loaddll "tkinfo.dll";
 #n = dllfunc("SimulateKeyStroke", 0x25, 1, 0, 0);
 #n = dllfunc("SimulateKeyStroke", 0x25, 0, 0, 0);
 #n = dllfunc("SimulateKeyStroke", 0x27, 0, 0, 0);

2行目でスレッド全体を選択して、3,4行目でスレッド開閉。
これで、スレッドトップだけを選択した状態に残ります。

ただ、目が痛いですけど。(^^;

[ ]
RE:42701 スレッドの先頭に行くには?No.42704
秀まるお2 さん 12/05/18 13:33
 
 その作戦でやりつつ、ちらつきを押さえるとしたら、こんなマクロになるかな
ぁと思います。この作戦の方が一瞬で終わるのでいいかもしれません。

 loaddll "tkinfo.dll";
 if( dllfunc("IsThreadView") != 1 ) {
     endmacro;
 }
 if( dllfunc("GetThreadLevel") == 0 ) {
     endmacro;
 }
 #pane = dllfunc("CurrentPane2");
 if( #pane != 1 ) {
     #n = dllfunc("SelectPane", 1);
 }
 #n = dllfunc("DisableDraw", 0);
 #n = dllfunc("SimulateKeyStroke", 0x25, 1, 0, 0);
 #n = dllfunc("SimulateKeyStroke", 0x25, 0, 0, 0);
 #n = dllfunc("SimulateKeyStroke", 0x27, 0, 0, 0);
 #n = dllfunc("EnableDraw", 0);
 #n = dllfunc("SelectPane", #pane);

[ ]
RE:42704 スレッドの先頭に行くには?No.42705
秀まるお2 さん 12/05/18 13:50
 
 押さえる --> 抑える の間違いでした。

[ ]
RE:42704 スレッドの先頭に行くには?No.42706
Tetchiro さん 12/05/18 13:54
 
補強ありがとうございます!

[ ]
RE:42692 スレッドの最後に行くには?No.42710
styth さん 12/05/20 18:21
 
 逆に、マクロで、スレッドの最後に行くにはどう書けば良いんでしょうか?
 よろしくお願いします。

[ ]
RE:42710 スレッドの最後に行くには?No.42712
秀まるお2 さん 12/05/21 12:59
 
 スレッドの最後に移動するコマンドも現状存在しないので、マクロでやるしか
無いかと思います。

 右矢印キーをシミュレートするやり方でいけるようです。

    loaddll "tkinfo.dll";
    if( dllfunc("IsThreadView") != 1 ) {
        endmacro;
    }
    #n = dllfunc("DisableDraw", 0);
    #pane = dllfunc("CurrentPane2");
    if( #pane != 1 ) {
        #n = dllfunc("SelectPane", 1);
    }
    while(1) {
        $trans = dllfuncstr("GetMailTransmitDate");
        $messageid = dllfuncstr("CurrentHeader", "Message-Id");
        if( $trans == "" ) {
            break;
        }
        #n = dllfunc("SimulateKeyStroke", 0x27, 0, 0, 0);
        if( dllfuncstr("GetMailTransmitDate") == $trans
         && dllfuncstr("CurrentHeader", "Message-Id") == $messageid ) {
            break;
        }
    }
    #n = dllfunc("EnableDraw", 0);
    #n = dllfunc("SelectPane", #pane);

[ ]
RE:42712 スレッドの最後に行くには?No.42713
秀まるお2 さん 12/05/22 14:33
 
 マクロで実現出来るのではありますが、技術的にそんなに難しく無いので、次
のβ版にて、スレッドの先頭/最後に移動するコマンドを追加することにします。
ただし、「設定・キー割り当て」の中から何かにキー割り当てすれば使えるとい
う、隠し的なコマンドで用意することにします。

[ ]
RE:42713 スレッドの最後に行くには?No.42743
styth さん 12/05/23 18:40
 
> マクロで実現出来るのではありますが、技術的にそんなに難しく無いので、次
>のβ版にて、スレッドの先頭/最後に移動するコマンドを追加することにします。
 このコマンドは、キーをシミュレートするやり方でマクロを記述できるのでしょう
か?
 そうすれば、マクロが短くなって良いのですが、よろしくお願いします。


[ ]
RE:42743 スレッドの最後に行くには?No.42744
秀まるお2 さん 12/05/24 10:19
 
 次のβ版にて対応するのは、「設定・キー割り当て...」の一覧の中に、

 「スレッドの先頭に移動」
 「スレッドの最期に移動」

 の2つのコマンドを追加するという対応になります。なので、これを何か適当
にキー割り当てすれば、その割り当てたキー操作だけでスレッドの先頭/最後へ
移動出来るようになります。

 マクロは不要になります。

 しいて、マクロから「スレッドの先頭に移動」等を実行したい場合は、次のβ
版以降からは、sendmessage文だけで実現出来るようになります。

 スレッドの先頭に移動:
    #n = sendmessage( hidemaruhandle(0), 0x111, 40377, 0);

 スレッドの最後に移動:
    #n = sendmessage( hidemaruhandle(0), 0x111, 40377, 0);

[ ]
RE:42744 スレッドの最後に行くには?No.42759
styth さん 12/05/24 23:26
 
> 次のβ版にて対応するのは、「設定・キー割り当て...」の一覧の中に、
> 「スレッドの先頭に移動」
> 「スレッドの最期に移動」
 多分、誤字だと思いますので、「スレッドの最後に移動」とした方が良いと思いま
す。

[ ]
RE:42759 スレッドの最後に行くには?No.42760
秀まるお2 さん 12/05/25 09:06
 
 すみません。変換ミスしました。

 それと、改版履歴に書くのを忘れてしまいましたが、実は昨日アップロードし
たV5.76β9にて対応しています。そちらは変換ミスしてませんでした。

[ ]
RE:42744 スレッドの最後に行くには?No.42762
styth さん 12/05/25 18:38
 
> スレッドの先頭に移動:
>    #n = sendmessage( hidemaruhandle(0), 0x111, 40377, 0);
> スレッドの最後に移動:
>    #n = sendmessage( hidemaruhandle(0), 0x111, 40377, 0);
 となっていますが、両方とも40377になっています。
 どちらかが違っていると思うのですが、御確認下さい。

[ ]
RE:42762 スレッドの最後に行くには?No.42764
秀まるお2 さん 12/05/25 23:12
 
 毎度お手数かけてすみません。

#define IDM_GOTO_THREAD_TOP             40377
#define IDM_GOTO_THREAD_BOTTOM          40378

 となってまして、


 スレッドの先頭に移動:
    #n = sendmessage( hidemaruhandle(0), 0x111, 40377, 0);
 スレッドの最後に移動:
    #n = sendmessage( hidemaruhandle(0), 0x111, 40378, 0);

 でした。大変失礼しました。

[ ]