2013年8月7日水曜日

ウインドウを常に最背面(デスクトップに貼り付ける)方法 c++

ガジェットのようにデスクトップに貼りつくプログラムを作ろうと、色々なサイトを回り
随分と悩んだけど、結局以下の一行で解決した。

//ウィンドウをProgram Managerと言う別プロセスの子ウィンドウとして指定して、Winmdows+Dキーでもデスクトップの上に残るようにする。なお、Aero機能が有効の場合はWorkerWプロセスに乗せないといけないらしい。
//気に食わないやり方だが、取りあえず目的を達成できるので良しとする。//だがこの方法、ガジェットと違って、Winmdows+Dキーを押したときのチラつきは無い。


SetParent(hWnd,FindWindow(NULL, _T("Program Manager")));//Program Manager のハンドルを取得し、親ウィンドウに設定する


Aeroが有効の場合は
SetParent(hWnd,FindWindow(NULL, _T("WorkerW")));//WorkerW のハンドルを取得し、親ウィンドウに設定する

今日まで知らなかったのだが、Visual StudioのツールにあるSky++と言うソフトでこれらの関係を見ることができる。いつか無理やり子ウィンドウとして解決するのではなく、ガジェットのようにちゃんとした解決法を見つけたい……。



以下に参考になったサイトのリンクを貼っておく。
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1483405764
http://dotlog.info/archives/1702
http://www.orangemaker.sakura.ne.jp/labo/memo/sdk-mfc/win7Desktop.html

0 件のコメント:

コメントを投稿