Hatena::ブログ(Diary)

..たれろぐ.. このページをアンテナに追加 RSSフィード

2010-02-03

Windows7 のタスクバーをなんとかして裏側に回したい

Windows7 になって、タスクバーがいろいろと強化されたのはいいけれど、常に最前面に表示されるようになってしまって画面が狭くなってしまった。XPでいうところの「常に手前に表示」を解除できない状態。
「タスクバーを自動的に隠す」を使うとカーソルが画面端にきたときにパタパタ^2してうっとーしいことこのうえないうえに、時計が隠れてしまう。

なんとかして、XPのタスクバーように常時表示しつつも他の窓の後ろ、裏側にまわせないものか、と少し試行錯誤してみた。

まずググってみたけれど「できないので自動で隠すを使ってね」みたいなのしかない。
レジストリでなんとかなりそうな気もするがこちらも情報発見できず。

仕方ないので、無理矢理なんとかする方向でいくことにして、最前面=ウィンドウスタイルに TOPMOST がらみの属性が付いてるんだろうと VisualStudio2008 の SPY++ で調べたところ、案の定 WS_EX_TOPMOST 属性が設定されていた。
これをひっぺがせば何とかなるんじゃないかと、適当に↓のコードを使って実験してみた。

#include "stdafx.h"
#include "windows.h"

int _tmain(int argc, _TCHAR* argv[])
{
	HWND taskbar_wnd = FindWindow(TEXT("Shell_TrayWnd"), NULL);
	SetWindowPos(taskbar_wnd, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_SHOWWINDOW|SWP_NOMOVE|SWP_NOSIZE);
}

その結果、WS_EX_TOPMOST 属性を外すのには成功して、タスクバーの挙動も属性通り他のウィンドウの裏側に回せるようになった。
しかしながら、しばらく使っているとタスクバーは自己顕示欲を復活させて最前面を陣取ってしまい、元の状態に戻ってしまう。
SPY++ で確認すると案の定 WS_EX_TOPMOST 属性が復活している。

この属性復活しているタイミングを調べたところ、

  • タスクバー上をクリックするなどしてタスクバーがアクティブになった場合
    • もすこし細かく書くと何らかの操作をしてタスクバーが最前面に出てきたた場合
  • エアロスナップが働いた場合

というタイミングで WS_EX_TOPMOST が再設定されている様子。

さて、これをどうしたものか、、
タスクバーの属性を定期的に監視して WS_EX_TOPMOST が有効になってたらすかさずそれを解除すのがいいのか、何か別の賢い方法があるのか、、

時間あるときにもう少し詰めてみたいと思う。


レジストリを弄ると最前面解除できてXP時代の動作ってのが平和なんだけどね。。


エアロスナップが働いた場合、というのは勘違いだったたので取り消し
最大化してもタスクバーまでしか最大化してくれない…
こんなツールが出てきていたり http://www.sevenforums.com/tutorials/54842-taskbar-always-top-disable-enable.html

paruparu 2010/03/28 21:21 タスクバーが画面を占領するの、私も耐えられません!
同じように思っている人も多いと思います。今後の成果に期待してます!

naga_sawanaga_sawa 2010/11/16 01:43 なんか制限があるみたいですが、こんなツールが出てきてます
http://www.sevenforums.com/tutorials/54842-taskbar-always-top-disable-enable.html
動作見てる分には「自動的に隠れる」設定にしておいてそれを阻害してる?みたいです。

AutoHotkey使いAutoHotkey使い 2013/05/05 14:17 わたしはAutoHotkeyのタイマー(スレッド)使って
コード書いて常に最前面化を○ffにしてしのいで鱒。

通りすがり通りすがり 2013/11/15 15:41 7で使えるか分かりませんが
RunAndHide というフリーソフトでタスクバーが消えてスッキリできました(vista)

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証