• ベストアンサー

アプリケーションのエラーを検出して他のプログラムを実行する方法

基本的な方法として, (1)プログラムの起動時にエラーレベルを検出 (2)エラーの時には,他のプログラムを起動 という処理をbatファイルで記載しようと考えています。 (Windows2000上での処理です。) ここで,分からない点が, (1)アプリケーションのエラーレベルをどうやって   調べるのか? (2)エラーのときは,ダイアログが立ち上がり,   DOSプロンプトが非アクティブになるので,   DOSプロンプト以外のウィンドウ,ダイアログ   を閉じたい。 という2点です。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • notnot
  • ベストアンサー率47% (4900/10361)
回答No.3

エラーになってもプログラムが終了しないのでは、バッチでは無理ですね。 VBS+WSHを使って、ループしながら、プログラムの終了とエラー時のダイアログのタイトルを監視するんでしょうか。WshShell.AppActivate("ABC") は、ABC というタイトルのウィンドウがあれば真を、無ければ偽を返します。ウィンドウがあればそれがアクティブになりますから、WshShell.SendKeys でダイアログを閉じるキーを送れば良いでしょう。 set WshShell = WScript.CreateObject("WScript.Shell") Do  if not WshShell.AppActivate("プログラムのウィンドウタイトル") then exit do  if WshShell.AppActivate("エラーのウィンドウのタイトル") then   WshShell.SendKeys "ウィンドウを閉じるキー"   エラーのときの処理   exit do  end if  Wscript.Sleep 1000 Loop

dai0222
質問者

お礼

3名もの方にご回答いただき,ありがとうございました。 とりあえず,バッチファイルでは難しいということは分かりました。 WSHは今まで使用したことが無かったのですが,便利ですね。教えていただいた情報を元に,望むプログラムが作成できました。 ありがとうございました。

その他の回答 (2)

  • anmochi
  • ベストアンサー率65% (1332/2045)
回答No.2

(1)エラーレベルはERRORLEVEL環境変数にセットされる。 例: dir *.bat if "%ERRORLEVEL%" == "1" goto :ERRSUB echo このフォルダにはバッチファイルがあります goto :EXITSUB :ERRSUB echo このフォルダにバッチファイルはありません :EXITSUB (2)いやぁ・・・・それは無理だ。勝手によそ様のプログラムを停止できるなんて、そりゃウィルスでしょ。他のプログラムというのが全て自作のものであれば、DDEなどのプロセス間通信を使って停止させる事はできるかも知れないけど。まぁ方法はあるにはあるのだが・・・・結構複雑なプログラムを組まないといけないよ。

  • popesyu
  • ベストアンサー率36% (1782/4883)
回答No.1

・まずもってバッチじゃ無理。最低WSHぐらいのスクリプトである必要があります。 ・エラーレベルの意味が不明。 もしあるにしてもそれはアプリ側の問題。例えばログに書き出すような仕組みがあるのならログを見れば何のエラーか分かるかもしれない。アプリ側にそのような用意がされていないなら分かりようがありません。 ・起動させようとしたアプリが起動していないというぐらいまでは例えばプロセスを直接見たりして分かるかもしれない。