2011-12-13 10 views
3

私はレガシーシステムと統合しようとしています。レガシーシステムは、ダイアログウィンドウを使用してエラーを報告します。ダイアログウィンドウ以外のリターンコードはまったくありません。私はRuntime.exec()でレガシーシステムを開始します。Runtime.exec()を呼び出した後のグラフィカルインタフェースの検出

実行されたプログラムがダイアログウィンドウやその他のグラフィカルインターフェイスを生成したかどうかを検出する方法はありますか?このソリューションはWindowsで実行され、実行されるプログラムはexeです。

答えて

0

私がした解決策は、@Gerrett Hallがリンクしているスニペットコードを使用することです。そのスニペットコードは、コマンドを実行して名前を保存する前にアクティブなウィンドウをチェックします。

次に、コマンドが返されなかった場合には、アクティブウィンドウが変更されたかどうかを確認します。もしあれば、プロセスを終了してください(Altキーを返すキーをグローバルに送ります)。

ダイアログから情報を取得するには、Ctrl + Cキーを使用してダイアログの内容をコピーし、ペーストバッファを読み込んでメッセージをログにコピーします。その部分はまだ分かっていない。

はい、これは醜いハックですが、レガシーシステムもそうです。

1

レガシーシステムでコンソールにエラーが報告された場合は、エラーメッセージが表示されます。
エラーの入力ストリームを取り、読んでください。このよう

Runtime rt = Runtime.getRuntime(); 
Process proc = rt.exec(cmd); 
// any error message? 
InputStream error = proc.getErrorStream(); 
InputStreamReader isr = new InputStreamReader(error); 
BufferedReader br = new BufferedReader(isr); 
String line=null; 
while ((line = br.readLine()) != null) 
     System.out.println(" ERROR >" + line); 

私は読むことをお勧めします:Runtime.exec() quirks

は、このヘルプを願っています。

+0

恐らくそれはうまくいきません。私は悲しい限り、それはグラフィカルなウィンドウとのみ対話します。 stderrには何もありません。 –

1

JNA snippetを使用すると、プロセスによって開始されたウィンドウをポーリングできます。

AFAIKを使用すると、Java Process APIを使用してプロセスから標準およびエラー出力ストリームのみを取得できます。

関連する問題