VC++6.0,MFC,ダイアログベースで開発をしています。
自分の作っているアプリが実行され、新たにウィンドウを開くときの処理は
できるのですが、それ以外に、例えばIEで新しいウィンドウが表示されたとか、
デスクトップ上でフォルダを開いて新しいウィンドウが表示だれたときの
処理はどのように行えばいいのでしょうか?
OnNcCreateやOnShowWindowでは、対象がその(現在開発中の)アプリのみで、
上で述べたようなものには対応しないみたいなので何かいい方法をご存知の方
どうかご教授お願いします。
個別にAPIのフックかな。
簡単な方法はないと思います
が。
#無理矢理ポーリング?
自アプリ以外のところで開かれたウインドウの生成について
簡単な方法で知る事はできないと思います。
元々、同じアプリでもプロセスが違えば、その辺のメッセージは別々に管理されます。
これは通常のアプリを作る時はこの方が都合が良いし、そうでなくては困るからです。
基本的には、Banさんが書かれているようにAPIのフックくらいだと思います。
多分、相当面倒な事をしないと無理でしょう。
あと考えられるのは定周期でウインドウの列挙をしてその差分で検知するくらいでしょうか。
これだとタイミングによっては拾いそこねるでしょうし、厳密にウインドウが開くタイミ
ングで
捕まえられるかどうかは微妙ですね。
周期を狭くしすぎると他のアプリの動作の足を引っ張りそうですし。
なんにせよ、どうしてもやりたいのであれば、相当苦労する事を覚悟でやった方がいいか
と思いますよ。
決まったウインドウだけでよいなら監視対象を絞れるので定周期の監視でもある程度はい
けそうですけどね。
SetWindowsHookEx じゃご要望にかなわないかな?
皆様お返事ありがとうございます。
>なんにせよ、どうしてもやりたいのであれば、相当苦労する事を覚悟でやった方がいいか
>と思いますよ。
そうでしたか・・・。できるだけ簡単に処理を済ませたかったのですが、無理みたいですねぇ。
>SetWindowsHookExじゃご要望にかなわないかな?
ちょっと違う感じです。
新しくウィンドウが表示されたか否かを取得するのが難しいなら、自アプリのウィンドウ外での
クリックやダブルクリックの検出でもできればいいのですが。。。
何かいい方法はありませんでしょうか?
単にウィンドウ外ということであればSetCaptureなどが使えますが、
その間、他のアプリはマウスが効かないので多分望みの動作ではなさそう。
であれば、今度はメッセージフックが必要ですね。
他人様の動作にかってに作用するのは、自分の操作より難易度が上がる、そういうものです。
いずれにしてもフックというテクニックは必要になるでしょうね。
やろうとしている事が一般的なアプリケーションの範疇から外れているので
それなりにテクニックが要求されます。
どうしても必要な機能なのであれば、本腰を入れてフックについて勉強される事をお勧め
します。
舌足らずだったかも。
一般的なという表現は曖昧ですね。
少なくともそのシステム内で自己完結できているようなアプリケーションでない場合、
と言うべきなのかな。私の感覚にでは極普通のアプリケーションは上記の表現を
含む物なので話的には通じるのですけれど。
>どうしても必要な機能なのであれば、本腰を入れてフックについて勉強される事をお勧め
>します。
そうですよね。。。なかなか難しいですね。
フックについて勉強してから出直してきます。
とりあえず今現在実装できるか否か、どのような方法が必要なのかがわかったので
解決にはチェックを入れておきます。