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

あるウィンドウがダイアログかどうか調べ...
 
通知
すべてクリア

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


はぐりん
 はぐりん
(@はぐりん)
ゲスト
結合: 23年前
投稿: 2
Topic starter  

 初めまして。

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

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

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

 LONG style=GetWindowLong(hWnd,GWL_STYLE);

if(style & WS_DLGFRAME)~~

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

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

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


引用未解決
トピックタグ
Bun
 Bun
(@Bun)
ゲスト
結合: 24年前
投稿: 761
 

一般的にはクラス名が

#32770 (ダイアログ)

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


返信引用
はぐりん
 はぐりん
(@はぐりん)
ゲスト
結合: 23年前
投稿: 2
Topic starter  

Bunさんありがとうございます!!

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

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

LONG exstyle=GetWindowLong(hWnd,GWL_EXSTYLE);

if(exstyle & WS_EX_DLGMODALFRAME)~~

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

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

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


返信引用
Bun
 Bun
(@Bun)
ゲスト
結合: 24年前
投稿: 761
 

RegisterClass()あたりを使って

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

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

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

> WS_EX_DLGMODALFRAME

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

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


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました