お世話になります。
現在、VB6.0(SP5) XPでAPP監視プログラムを開発しているのですが、プログラム実行中にエラーメッセージ等のMSGBOXが表示された場合の
処理をしたいですが、よい方法が浮びません。
一応、そのAPPがアクティブになっているときは、GetActiveWindowでハンドルを取得し、該当するクラス名が"#32770"の場合は、判断できています。
但し、他のAPPを操作中(非アクティブ)にそのAPPでMSGBOXが表示された場合は、うまくいきません。どうすればよろしいでしょうか。他のよい方法があればご教授願います。
よろしくお願いします。
GetWindows関数(API)を使えばできるかもしれません。
NVさん、返事ありがとうございます。
やっぱ使い方がまずかったのかうまくいかないですね。
もうちょっとかんばってみます。
MSGBOXのハンドルをうまく取得できないかな。。。
以前に回答したものですが、参考になれば
http://madia.world.coocan.jp/cgi-bin/VBBBS/wwwlng.cgi?print+200403/04030020.txt
IMAさん
サイトを見せてもらったのですが、いまいちよくわかりません。
すいません。
APPが非アクティブになった場合、トップレベルのWindowのハンドルは
どうやって取得するのでしょうか。
(Screen.ActiveForm.Hwndだと思ってやってみたのですが、アクティブ時にGetActiveWindowで取得したハンドルと違っていました。)
GetActiveWindow()はWindows全体でアクティブなウィンドウかと。
Screen.AcrtiveFormは動いているプロセス内の、アクティブなフォームのことだと思われ…
で、APPが非アクティブになった場合、そのAPPの現在のトップレベルのWindowのハンドルをどうやって取得するんでしょうかっていうのを質問したかったのです。
レスが帰ってきたので、俺も返さないとな…
GetTopWindowとか、GetParentWindowとか、EnumChildWindowsとか、駄目だった?
> サイトを見せてもらったのですが、いまいちよくわかりません。
読む気もなかったのかな。
この言い方だと、調べてないのバレバレですよ。
見たのならば、何がわからないのかかけるはず。
>で、APPが非アクティブになった場合、そのAPPの現在のトップレベルのWindowのハンドルをどうやって取得するんでしょうかっていうのを質問したかったのです
なんか問題が変わってますね。
MSGBOXが表示されているかどうかを知りたいんじゃないですか?
MSGBOXに限ってであればEnumWindowsとEnumChildWindowsで全てのウィンドウが
列挙できるから、そこからクラス名が"#32770"のウィンドウを探してやるだけ
じゃないですか?
Msgbox を監視するという実装方針は本当に適切なのでしょうか?
監視対象のプログラムの作者に改造をお願いすることが出来るのなら、
・Msgboxを出すときに、別のプログラムからも容易にアクセスできるデータ保持領 域
(例えば、ログファイルファイルとか、mdbファイルとか、イベントログとか)
にもメッセージを書き込む
・別プログラムはそのデータ保持領域を監視する
というような実装でも良いように思いますが。
みなさん、レスありがとうございます。
>読む気もなかったのかな。
>この言い方だと、調べてないのバレバレですよ。
>見たのならば、何がわからないのかかけるはず。
実は、英語は大の苦手なのでこういう言い方をしました。申し訳ない。
また、EnumWindowsとEnumChildWindowsのAPIもありましたね。
これで試してみます。
そんなことより、マルチポストはいけないでしょ。
http://freedom.mitene.or.jp/~sugisita/papa/cgi/korobbs.cgi
ツイート | ![]() |