VB6 SendMessageでBM_CLICKを送るとエラー

解決


m  2005-10-27 18:30:05  No: 126975

EXE1とEXE2があり、EXE1からEXE2のボタンにSendMessageでBM_CLICKを送っています。EXE2のボタンの処理は Unload Me のみです。
このとき、以下のエラーがでて強制的にEXE2が落ちます。なぜでしょうか?

「オートメーションエラーです。
  アプリケーションが入力同期呼び出しをディスパッチしているため、呼び出せません。」


特攻隊長まるるう  2005-10-27 18:47:25  No: 126976

エラーの理由は
http://www.bcap.co.jp/hanafusa/logbbs1/wforum.cgi?no=2078&reno=2065&oya=2065&mode=msgview
がぐーぐる検索で引っ掛かりました。


m  2005-10-27 18:58:56  No: 126977

ありがとうございます。
そこは見ました。確かに平行というかそういった処理はしています。

EXE2は起動したら、タイマーを有効にし、IEを立ち上げ(非表示)てIEの読み込みが終了するとそのまま
IEとEXE2は立ち上げたままにして、タイマーも動いたままにしています。

タイマーの処理(一秒間隔)は、別のウィンドウを監視して見付からなければEXE2を終了
という処理をしています。しかし、別のウィンドウはEXE1が起動している間は起動しているので、タイマーの処理は実際は何もしていない状態です。

EXE2の処理は Unload Me のみと書きましたが実際はタイマーを無効にした後に
Unload Me しています。


m  2005-10-27 19:14:33  No: 126978

原因というか一応エラーは出なくなりました。
Unload Me したあとの Form_QueryUnload の処理でエラーになっていました。

Form_QueryUnload  の処理は、
IE.Quit
Set IE = Nothing
です。

IE.Quitの時にたぶんそのエラー(VBがだしている?)が出ています。

IEは [Set IE = New SHDocVw.InternetExplorer] として作成していますが
IEを終了させる時は [Set IE = Nothing] だけでよいのでしょうか?
IE.Quitで終了さした後に [Set IE = Nothing] を通常はしていますが・・・。


魔界の仮面弁士  2005-10-27 21:41:52  No: 126979

> IEを終了させる時は [Set IE = Nothing] だけでよいのでしょうか?
駄目でしょう。そのまま終了せずに残ってしまうはずです。
たとえば、
  Set x = CreateObject("InternetExplorer.Application")
  x.Visible = True
  Set x = Nothing
という 3行だけの単純なアプリを実行させてみると解りますよね。

> IE.Quitで終了さした後に [Set IE = Nothing] を通常はしていますが・・・。
その手法も微妙かも。

間違っているわけではありませんが、IE の終了はプログラムから Quit が
呼び出された場合だけではなく、スクリプトから window.close() された
場合や、手動操作で終了させられた場合もありえますので、Quit しようと
した時には、既に IE が居なくなっている可能性もゼロではありません。
できれば、OnQuit を併用された方が良いのではないかと。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加