MSGBOXが表示されているかどうか調べるには


小心者  2005-02-10 17:55:30  No: 88403  IP: [192.*.*.*]

お世話になります。
現在、VB6.0(SP5) XPでAPP監視プログラムを開発しているのですが、プログラム実行中にエラーメッセージ等のMSGBOXが表示された場合の
処理をしたいですが、よい方法が浮びません。
一応、そのAPPがアクティブになっているときは、GetActiveWindowでハンドルを取得し、該当するクラス名が"#32770"の場合は、判断できています。
但し、他のAPPを操作中(非アクティブ)にそのAPPでMSGBOXが表示された場合は、うまくいきません。どうすればよろしいでしょうか。他のよい方法があればご教授願います。
よろしくお願いします。

編集 削除
NV  URL  2005-02-10 18:40:26  No: 88404  IP: [192.*.*.*]

GetWindows関数(API)を使えばできるかもしれません。

編集 削除
小心者  2005-02-10 22:25:44  No: 88405  IP: [192.*.*.*]

NVさん、返事ありがとうございます。
やっぱ使い方がまずかったのかうまくいかないですね。
もうちょっとかんばってみます。
MSGBOXのハンドルをうまく取得できないかな。。。

編集 削除
IMA  2005-02-14 04:43:13  No: 88406  IP: [192.*.*.*]

以前に回答したものですが、参考になれば

http://madia.world.coocan.jp/cgi-bin/VBBBS/wwwlng.cgi?print+200403/04030020.txt

編集 削除
小心者  2005-02-14 16:24:10  No: 88407  IP: [192.*.*.*]

IMAさん
サイトを見せてもらったのですが、いまいちよくわかりません。
すいません。
APPが非アクティブになった場合、トップレベルのWindowのハンドルは
どうやって取得するのでしょうか。
(Screen.ActiveForm.Hwndだと思ってやってみたのですが、アクティブ時にGetActiveWindowで取得したハンドルと違っていました。)

編集 削除
ガッ  2005-02-14 16:36:57  No: 88408  IP: [192.*.*.*]

GetActiveWindow()はWindows全体でアクティブなウィンドウかと。
Screen.AcrtiveFormは動いているプロセス内の、アクティブなフォームのことだと思われ…

編集 削除
小心者  2005-02-14 17:17:20  No: 88409  IP: [192.*.*.*]

で、APPが非アクティブになった場合、そのAPPの現在のトップレベルのWindowのハンドルをどうやって取得するんでしょうかっていうのを質問したかったのです。

編集 削除
ガッ  2005-02-14 17:46:12  No: 88410  IP: [192.*.*.*]

レスが帰ってきたので、俺も返さないとな…
GetTopWindowとか、GetParentWindowとか、EnumChildWindowsとか、駄目だった?

編集 削除
除菌  2005-02-14 18:28:53  No: 88411  IP: [192.*.*.*]

> サイトを見せてもらったのですが、いまいちよくわかりません。

読む気もなかったのかな。
この言い方だと、調べてないのバレバレですよ。
見たのならば、何がわからないのかかけるはず。

編集 削除
。。。  2005-02-14 18:52:13  No: 88412  IP: [192.*.*.*]

>で、APPが非アクティブになった場合、そのAPPの現在のトップレベルのWindowのハンドルをどうやって取得するんでしょうかっていうのを質問したかったのです
なんか問題が変わってますね。
MSGBOXが表示されているかどうかを知りたいんじゃないですか?
MSGBOXに限ってであればEnumWindowsとEnumChildWindowsで全てのウィンドウが
列挙できるから、そこからクラス名が"#32770"のウィンドウを探してやるだけ
じゃないですか?

編集 削除
ひろ  2005-02-14 19:40:15  No: 88413  IP: [192.*.*.*]

Msgbox を監視するという実装方針は本当に適切なのでしょうか?

監視対象のプログラムの作者に改造をお願いすることが出来るのなら、

・Msgboxを出すときに、別のプログラムからも容易にアクセスできるデータ保持領  域
  (例えば、ログファイルファイルとか、mdbファイルとか、イベントログとか)

  にもメッセージを書き込む

・別プログラムはそのデータ保持領域を監視する

というような実装でも良いように思いますが。

編集 削除
小心者  2005-02-15 09:11:38  No: 88414  IP: [192.*.*.*]

みなさん、レスありがとうございます。
>読む気もなかったのかな。
>この言い方だと、調べてないのバレバレですよ。
>見たのならば、何がわからないのかかけるはず。
実は、英語は大の苦手なのでこういう言い方をしました。申し訳ない。
また、EnumWindowsとEnumChildWindowsのAPIもありましたね。
これで試してみます。

編集 削除
マルチポスト  2005-02-15 09:49:48  No: 88415  IP: [192.*.*.*]

そんなことより、マルチポストはいけないでしょ。
http://freedom.mitene.or.jp/~sugisita/papa/cgi/korobbs.cgi

編集 削除