告知欄です
1- レス

旧雑記サルベージ


[6]管理人 ★:06/09/06 17:02 ID:???
2004年07月18日
■WinTabMod(www12.plala.or
Explorerシェルには、Win+Tabを押すとタスクバーのボタンに順にフォーカスが移り、Enterを押すことでそのウィンドウをアクティブにできるというよくわからん機能が存在する。
WinTab一回で右隣や左隣をアクティブに出来れば便利なのに、何故かそうではない。
WinTabModを使うと、このとなりのタスクボタンをアクティブにするという機能が実現できる。
非常駐で、ランチャなどから実行して使う。
引数付きで起動すると前のボタンが選択される。
AutoHotkey(autohotkeyにでも登録して使うと便利かと思ったが、Windows2000専用だった。
2kとXPではタスクバーの構造が違うんだそうだ。
TClockのサイトの記事(homepage1.niftyによると、タスクバーの構造はしょっちゅう変わっているらしい。
とりあえず、AutoHotkeyで同じようなことが出来ないかやってみる。
XPのタスクボタンはツールバーで出来ているようだ。
ウィンドウメッセージのTB_系のメッセージでツールバーを色々と操作できる。
TB_BUTTONCOUNTでボタンの数が、TB_ISBUTTONCHECKEDで選択状態かが取得できる。
しかし、何故かTB_ISBUTTONCHECKEDの引数に指定するのがボタン番号じゃなくてコマンド番号になっている。
TB_COMMANDTOINDEXでコマンド番号からボタン番号を取得できるが、逆はない。
TB_GETBUTTONでTBBUTTON構造体を取得してコマンド番号を得られるが、AutoHotkeyは構造体を扱うような複雑なメッセージ処理は出来ない。
仕方ないので、コマンドIDを一つずつ見ながら、TB_COMMANDTOINDEXでボタン番号を取得することにする。
何故かTB_BUTTONCOUNTで得る値は実際に表示されているボタンの数の2倍になっており、ウィンドウごとに2つのボタンが割り当てられている。
最初にウィンドウが表示されると、コマンドID0と1、ボタンID0,1に割り当てられ、以降順次割り当てられていき、ウィンドウが閉じられると、対応するコマンドIDは欠番になり、新たなウィンドウは一番小さい空いているIDのところに割り当てられるようだ。
とりあえず、TB_BUTTONCOUNT、TB_COMMANDTOINDEX、TB_ISBUTTONCHECKEDで選択されているボタン番号を取得できるようになった。
あとは、Win+Tabを必要な回数押してEnterを押すキーストロークを発生させれば、ウィンドウ切替が実現できる。
と思ったら、時々キー操作がうまく届いていなくて、アクティブウィンドウにEnterが送られて予期せぬ動作をすることがある。
そこで、タスクバーに直接キー操作を送ることに。
そして、タスクバーにフォーカスをあわせて左右矢印1回押せば左右のボタンにフォーカスが行くことに気付いた。
これなら、メッセージのやり取りとかなしにウィンドウが切り替えられてしまう。
今までの苦労はなんだったのか。
とりあえず出来たもの。
Numpad2::
    ControlFocus,ToolbarWindow322,ahk_class Shell_TrayWnd
    ControlSend,ToolbarWindow322,{Right}{Enter},ahk_class Shell_TrayWnd
return
Numpad1::
    ControlFocus,ToolbarWindow322,ahk_class Shell_TrayWnd
    ControlSend,ToolbarWindow322,{Left}{Enter},ahk_class Shell_TrayWnd
return
修飾キーつきのホットキーだとうまく動作しない。
多分、修飾キーを離す動作を加えてやる必要がある。


名前

E-mail



0ch BBS 2005-10-08