「デスクトップの表示」を消す

※wmsmsg.exeの解説ページ:簡単wmメッセージ送信
wmsmsgダウンロード:wmsmsg.exe.zip (SkyDrive)

Windows 7 画面右下(タスクバー右端)にある「デスクトップの表示」領域を”アプリで”消してみた。

※説明の前に。アプリを使わないでも普通にマウス右ボタンで機能をOFFにできます。
「デスクトップのプレビュー(P)」に付いているチェックを外すだけです。


で、「デスクトップの表示」の半透明部分は普通のウィンドウと変わりないので、アプリで終了コマンドを送信すると居なくなります。

消えた

終了させると元に戻すにはログオフ、ログインをしないと戻らないです。

そこの領域はタスクトレイ配下の子ウィンドウです、たぶん一意なWINDOWCLASSで、
誰も使わないであろう「TrayShowDesktopButtonWClass」というクラス名で登録され
ていたので子ウィンドウの列挙とタイトル名(あれば)とクラス名を取得するように追加。
クラス名での検索機能を追加し、WM_CLOSEを送ってみました。
(意味不明でしょうが、2つ前の投稿から続く内容なのでここでの説明は省略してます)

特に他のウィンドウと機能連携してる様子も無いので単独で終了させても何も起こりません。
★終了させて消す場合、領域の再計算でトレイアイコン領域が増え、スクロール矢印が出る場合があります。
★おすすめは 「無効」 か 「非表示」です。

バッチファイルをスタートアップフォルダーとかに入れておけば消えます。

rem 「削除」する場合 wmsmsg64 /wm:0x10 /FC:TrayShowDesktopButtonWClass /Post /NoM /NoV /Child /Disp:1 rem 「無効」にする場合 wmsmsg64 /FC:TrayShowDesktopButtonWClass /NoM /NoV /Child /Disp:1 /wm:0x007c /wp:-16 /lp:0x5c000000    rem 「非表示」にする場合 wmsmsg64 /FC:TrayShowDesktopButtonWClass /NoM /NoV /Child /Disp:1 /wm:0x007c /wp:-16 /lp:0x44000000    rem 「元に戻す」場合 ※削除は元に戻りません。 wmsmsg64 /FC:TrayShowDesktopButtonWClass /NoM /NoV /Child /Disp:1 /wm:0x007c /wp:-16 /lp:0x54000000     

解説:ウィンドウの表面的な見た目を変更するのでウィンドウスタイルのメッセージを送ります
Windows電卓を関数モードにして計算が必要です。(まあ見たまんま足すだけですが)

/wm:0x007c ウィンドウスタイル変更メッセージの定義
:"winuser.h"をWeb等で参照。
WM_STYLECHANGING   0x007C
WM_STYLECHANGED    0x007D
/wp:-16 ウィンドウスタイル変更の種類が2種類ある
:"winuser.h"をWeb等で参照。
GWL_STYLE     (-16)
GWL_EXSTYLE    (-20)
今回変更するウィンドウ
TrayShowDesktopButtonWClass
のウィンドウスタイルの内容。

「無効」にする場合はこれに
”WS_DISABLED”を追加。
「非表示」にする場合は
”WS_VISIBLE”を削除。
すればいいことになります

ウィンドウスタイルの値:ページ下付録参照。


 
/lp:0x5c000000
ウィンドウを「無効」にする
ウィンドウスタイルの値:ページ下付録参照。
WS_CHILDWINDOW(WS_CHILD)     0x40000000
WS_VISIBLE                0x10000000
WS_CLIPSIBLINGS            0x04000000
値先頭の"0x"は16進数だよの意味なので計算時は
後ろ8桁を入力します
 
3つの16進値を関数電卓の「Xor」で全部足すと
元の値の「0x54000000」になり、
これに「無効」を意味する「WS_DISABLED 0x08000000」
を「Xor」で加算すると「0x5C000000」になります
 
/lp:0x44000000
ウィンドウを「非表示」にする
ウィンドウスタイルの値:"ページ下付録参照。
先の説明の通り、今度は”WS_VISIBLE”が無用なので
WS_CHILDWINDOW(WS_CHILD)     0x40000000
WS_CLIPSIBLINGS            0x04000000
の2つだけ「Xor」で足すと「0x44000000」になります
 
または「元の値 0x54000000」から要らない値の
「WS_VISIBLE 0x10000000」を「Xor」すると求める値になります
 
やりかた つまり元の値に対して「追加・削除」したい値を1個1個「Xor」していくだけになります。(ただし全体の値から個別のスタイルがセットされている・いないは計算しないと見ただけでは普通は判らないので追加したつもりが実は削除していたとかって事があります)

 
※ 実行モジュールの”wmsmsg.exe”のダウンロードと説明については、1つ前と2つ前の投稿を読んでもらえるとわかります。
それと実は機能追加でスタイル値を計算しなくても「WM_ENABLE」「WM_SHOWWINDOW」メッセージだけで使用不可・非表示が可能だったりします(前頁)無効にするには:
wmsmsg64 /FC:TrayShowDesktopButtonWClass /Child /Disp:1 /wm:0xA だけです。
常に最前面に表示する”TOPMOST”やサイズ変更を不可・可にする場合はスタイル変更が必要です

 
[おわり]
 
検索条件を変えてやれば色々なアプリの特定部位のスタイルを変更可能です、ただVista以降はエアロの視覚テーマが適用されているので見た目が反映されない部分もあるかもしれません。
ウィンドウ外観の見た目のスタイル:後からスタイルを追加する場合は大抵OKですが、逆にタイトルバーや枠線を無くす等の場合はOSの仕組み上ウィンドウを再作成しないと反映されないかと思います。

重要: ウィンドウスタイルを変える方法は事前にそのウィンドウスタイルが判っている場合にしか使えません、ウィンドウスタイルは1つのフィールドに格納された値で複数の”WS_”スタイルを表現している為に、1つの値だけ指定すると他に必要な”WS_CHILD”とかの値が上書きされて消えて無くなります
因みにスタイルはページ下付録以外にも、ウィンドウ種類(リスト・ボタン等)の各コントロール毎に定義された標準スタイルがありますので「詳しくはWeb検索して下さい」、としか言えません。

例外: 今回スタイルを変更した「デスクトップの表示ボタン」のように通常表示されて使用可能状態なウィンドウは論理的に「WS_VISIBLE」は”必ずあり”、逆に「WS_DISABLED」は”絶対に無い”状態です。
つまりこの2つは他のスタイルの存在に関係なく単純に「元の値とXorすればOK」と言えます。

事前に個別のウィンドウスタイルを知る方法はツール等でなんとかして見るしかないです・・・
アプリ作るなり機能付加すれば判るけど、そこだけだらだら表示するのはいやなので無しの方向で。
(”wmsmsg.exe”では”/Debug”でウィンドウスタイルの全体値だけは表示されます)
 
ウィンドウは視覚で直接見れるし、ウィンドウの種類(コントロール)によって使われる標準的なスタイルもだいたい決まっているから、「感」でスタイルの組み合わせを考えて試す事は可能・・・かもしれない
 
 
付録:ウィンドウスタイル定義一覧

/*
 * Window Styles
 */
#define WS_OVERLAPPED       0x00000000L
#define WS_POPUP            0x80000000L
#define WS_CHILD            0x40000000L
#define WS_MINIMIZE         0x20000000L
#define WS_VISIBLE          0x10000000L
#define WS_DISABLED         0x08000000L
#define WS_CLIPSIBLINGS     0x04000000L
#define WS_CLIPCHILDREN     0x02000000L
#define WS_MAXIMIZE         0x01000000L
#define WS_CAPTION          0x00C00000L     /* WS_BORDER | WS_DLGFRAME  */
#define WS_BORDER           0x00800000L
#define WS_DLGFRAME         0x00400000L
#define WS_VSCROLL          0x00200000L
#define WS_HSCROLL          0x00100000L
#define WS_SYSMENU          0x00080000L
#define WS_THICKFRAME       0x00040000L
#define WS_GROUP            0x00020000L
#define WS_TABSTOP          0x00010000L

#define WS_MINIMIZEBOX      0x00020000L
#define WS_MAXIMIZEBOX      0x00010000L


#define WS_TILED            WS_OVERLAPPED
#define WS_ICONIC           WS_MINIMIZE
#define WS_SIZEBOX          WS_THICKFRAME
#define WS_TILEDWINDOW      WS_OVERLAPPEDWINDOW


/*
 * Extended Window Styles
 */
#define WS_EX_DLGMODALFRAME     0x00000001L
#define WS_EX_NOPARENTNOTIFY    0x00000004L
#define WS_EX_TOPMOST           0x00000008L
#define WS_EX_ACCEPTFILES       0x00000010L
#define WS_EX_TRANSPARENT       0x00000020L
#if(WINVER >= 0x0400)
#define WS_EX_MDICHILD          0x00000040L
#define WS_EX_TOOLWINDOW        0x00000080L
#define WS_EX_WINDOWEDGE        0x00000100L
#define WS_EX_CLIENTEDGE        0x00000200L
#define WS_EX_CONTEXTHELP       0x00000400L

#endif /* WINVER >= 0x0400 */
#if(WINVER >= 0x0400)

#define WS_EX_RIGHT             0x00001000L
#define WS_EX_LEFT              0x00000000L
#define WS_EX_RTLREADING        0x00002000L
#define WS_EX_LTRREADING        0x00000000L
#define WS_EX_LEFTSCROLLBAR     0x00004000L
#define WS_EX_RIGHTSCROLLBAR    0x00000000L

#define WS_EX_CONTROLPARENT     0x00010000L
#define WS_EX_STATICEDGE        0x00020000L
#define WS_EX_APPWINDOW         0x00040000L


#define WS_EX_OVERLAPPEDWINDOW  (WS_EX_WINDOWEDGE | WS_EX_CLIENTEDGE)
#define WS_EX_PALETTEWINDOW     (WS_EX_WINDOWEDGE | WS_EX_TOOLWINDOW | WS_EX_TOPMOST)

#endif /* WINVER >= 0x0400 */

#if(_WIN32_WINNT >= 0x0500)
#define WS_EX_LAYERED           0x00080000

#endif /* _WIN32_WINNT >= 0x0500 */


#if(WINVER >= 0x0500)
#define WS_EX_NOINHERITLAYOUT   0x00100000L // Disable inheritence of mirroring by children
#define WS_EX_LAYOUTRTL         0x00400000L // Right to left mirroring
#endif /* WINVER >= 0x0500 */

#if(_WIN32_WINNT >= 0x0501)
#define WS_EX_COMPOSITED        0x02000000L
#endif /* _WIN32_WINNT >= 0x0501 */
#if(_WIN32_WINNT >= 0x0500)
#define WS_EX_NOACTIVATE        0x08000000L
#endif /* _WIN32_WINNT >= 0x0500 */

投稿日: 2011/07/19 | カテゴリー: ツール、アプリ, Windows OS | パーマリンク コメントする.

コメントを残す