スレッドの開閉、前/次のメールNo.07394
Iranoan さん 03/11/13 17:20
 
 皆さん今日は、Iranoan です。
 メール一覧のスレッド開閉と (上/下ではなく) 前/次のメールを、マクロで
実現する方法はあったでしょうか?

[ ]
RE:07394 スレッドの開閉、前/次のメールNo.07396
SHIROYUKI さん 03/11/13 22:08
 
SHIROYUKI(元fuhhy)です。Iranoan さん、こんにちは。

> スレッド開閉と (上/下ではなく) 前/次のメール

// 履歴戻り
#n = sendmessage(hidemaruhandle(0), 0x0111, 40206, 0);
// 履歴進み
#n = sendmessage(hidemaruhandle(0), 0x0111, 40207, 0);

// スレッドの展開
// すべて展開
#n = sendmessage(hidemaruhandle(0), 0x0111, 40122, 0);
// 最近の分を展開/その他は折りたたみ
#n = sendmessage(hidemaruhandle(0), 0x0111, 40123, 0);
// 未読分を展開/その他は折りたたみ
#n = sendmessage(hidemaruhandle(0), 0x0111, 40124, 0);
// すべて折りたたみ
#n = sendmessage(hidemaruhandle(0), 0x0111, 40125, 0);

関数が無い現状ではこうするしかないんじゃないでしょうか。

外してたらすみません。

[ ]
RE:07396 スレッドの開閉、前/次のメールNo.07397
Iranoan さん 03/11/13 23:08
 
 SHIROYUKI さん今日は、Iranoan です。
> // 履歴戻り
> #n = sendmessage(hidemaruhandle(0), 0x0111, 40206, 0);
> // 履歴進み
> #n = sendmessage(hidemaruhandle(0), 0x0111, 40207, 0);
 こちらは希望の機能でした。有り難うございます。

 ただスレッドに関しては希望の関数ではありませんでした。私の記載した情
報に不足があったのが原因ですが、私がやりたいのは、今フォーカスのあたっ
ているメールのスレッドを閉じたいのです。これは可能でしょうか?

 ところで、sendmessage 関数の引数はどの様に調べられたのでしょう?

[ ]
RE:07397 スレッドの開閉、前/次のメールNo.07398
SHIROYUKI さん 03/11/13 23:12
 
> 私がやりたいのは、今フォーカスのあたっ
> ているメールのスレッドを閉じたいのです。
やはりそっちの方でしたか。それについては私には見つける事が出来ませんでした。

> ところで、sendmessage 関数の引数はどの様に調べられたのでしょう?
リソースハッカーで turukame.exe を開いたら menu のところに書いてました。
と言うわけで、後は Iranoan さんにお任せします。

[ ]
RE:07397 スレッドの開閉、前/次のメールNo.07399
秀まるお さん 03/11/14 15:34
 
> 私がやりたいのは、今フォーカスのあたっ
> ているメールのスレッドを閉じたいのです。これは可能でしょうか?

 閉じるだけなら、左矢印キーを何回も押す操作をシミュレートする手はありま
す。

 開く方は、たぶん不可能です。

 どうしてもご自分でということなら、独自DLLを作成して、ツリービューコン
トロールにTVM_EXPANDメッセージを送ってやるしかありません。

 しいて必要ならtkinfo.dllに関数追加などしますけど。

[ ]
RE:07399 スレッドの開閉、前/次のメールNo.07402
Iranoan さん 03/11/14 18:45
 
 秀まるおさん、SHIROYUKI さん今日は、Iranoan です。
>  閉じるだけなら、左矢印キーを何回も押す操作をシミュレートする手はありま
> す。
 これは考えては見たのですが、今一つスマートでないですね。
 そこで改めて質問ですが、スレッドの選択を実現する方法はあるでしょう
か? これを使えば、必ず 2 アクションでスレッドが閉じれそうなので。

> リソースハッカーで turukame.exe を開いたら menu のところに書いてました。
 やはりこういったツールを使っているんですね。情報有り難うございました。

[ ]
RE:07402 スレッドの開閉、前/次のメールNo.07403
秀まるお さん 03/11/14 19:00
 
>  そこで改めて質問ですが、スレッドの選択を実現する方法はあるでしょう
> か? これを使えば、必ず 2 アクションでスレッドが閉じれそうなので。

 Shift+左矢印キーをシミュレートすればいいです。それ以外には無いと思いま
す。tkinfo.dllのSimulateKeyStrokeを使えばできるんじゃないかとは思います
けど。

extern "C" int SimulateKeyStroke( int vkey
                                , BOOL fShift, BOOL fControl ) {
    HWND hwndFocus = GetFocus();
    BYTE abKeyPrev[256];
    BYTE abKey[256];
    GetKeyboardState( (BYTE*)abKey );
    memcpy( abKeyPrev, abKey, sizeof(abKey) );
    abKey[VK_SHIFT] = fShift ? 0x80 : 0;
    abKey[VK_CONTROL] = fControl ? 0x80 : 0;
    SetKeyboardState( (BYTE*)abKey );
    UINT    scan = MapVirtualKey( vkey, 0 );
    SendMessage( hwndFocus, WM_KEYDOWN, vkey, 1 + (scan << 16) );
    SendMessage( hwndFocus, WM_KEYUP, vkey
               , 1 + (scan << 16) + 0xC0000000 );
    SetKeyboardState( (BYTE*)abKeyPrev );
    return 0;
}

[ ]
RE:07402 スレッドの開閉、前/次のメールNo.07404
たまがわ さん 03/11/14 19:18
 
こんばんは。

> そこで改めて質問ですが、スレッドの選択を実現する方法はあるでしょう
>か? これを使えば、必ず 2 アクションでスレッドが閉じれそうなので。

 これでいけると思います。

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

[ ]
RE:07403 スレッドの開閉、前/次のメールNo.07405
Iranoan さん 03/11/14 19:57
 
 秀まるおさん今日は、Iranoan です。
> tkinfo.dllのSimulateKeyStrokeを使えばできるんじゃないかとは思います
 出来ました。どうも有り難うございます。
 少なくともヘルプのキーワードにはありませんが、いつの間にかこんな関数
が追加されていたんですね。[Shift], [Ctrl] との組み合わせを実現できるの
で、Bypass_keybd_event より便利です(^^)。

[ ]