あるウィンドウがダイアログかどうか調べるには?

[戻る]
はぐりん 2002/02/15(金) 00:41:39
 初めまして。

 他のウィンドウをフックして、最前面にあるウィンドウのタイトルバーに常駐(寄
生?)する、よくある時計のようなアプリを作ろうと思っています。
(ちなみにVisualC++ でSDKです)

 そこで、ダイアログ型のウィンドウのタイトルバーには移らないようにしたいのです
が、対象のウィンドウが普通のウィンドウなのかダイアログなのかを見分ける方法がわか
りません。

 対象となるウィンドウのハンドルから、

 LONG style=GetWindowLong(hWnd,GWL_STYLE);

  if(style & WS_DLGFRAME)〜〜

 とやれば出来ると思ったのですが、うまく行かないようです。

 まだ駆け出しなので、もしかするとすごく単純なことを聞いてしまっているかもしれな
いんので、そのときはすみませんm(__)m

 よろしくお願いします!!

Bun 2002/02/15(金) 08:24:44
一般的にはクラス名が

#32770 (ダイアログ)

のようですが、変更されていたらダメでしょうかね。

はぐりん 2002/02/15(金) 10:32:41
[[解決]]
Bunさんありがとうございます!!

GetClassNameを使ってためしてみたところ、一応うまく行きました!!
ただ、クラス名をつけてダイアログを作られると、どうなるんでしょうか?(^^;)
(そんなことできないのかな??)

Asroc-Toというタイトルバーに常駐するランチャーのソースを公開しているフリーウェア
があるのですが、コメントなどが少なく、読解をあきらめていましたが、ダイアログかど
うか判定する部分をじっくり見たあげく、

 LONG exstyle=GetWindowLong(hWnd,GWL_EXSTYLE);

 if(exstyle & WS_EX_DLGMODALFRAME)〜〜

 どうやらこの部分でダイアログかどうかを判定しているようなので、実装してみると、
これも一応うまく行きました。タイトルバーのあるダイアログはWS_EX_DLGMODALFRAMEス
タイルを指定してあるようですね。

 本当にこれだけで判定できているか自信がないので、ダイアログのクラス名が#32770で
あることも、判定の関門のひとつに加えようと思います。

 ありがとうございました。

Bun 2002/02/15(金) 11:06:12
RegisterClass()あたりを使って

WNDCLASS構造体のlpszClassNameメンバを変更されていたりしたら

判定できないでしょう。多分。

でもあんまりやらないのかな、こんなことは。

> WS_EX_DLGMODALFRAME

こっちのほうが安全かもしれませんね。

spy++でいろいろと調査したら、何かわかるかも。(^^;

古いスレッドには追加発言できません。