- 締切済み
VBからDOS画面に表示されている文字を読み取りたい
どなたかご存知の方教えてください。 あるプログラムがDOS画面で処理され正常に処理されたら「正常に処理されました。何かKEYを押してください」とDOSの画面で止まってしまいます。これに対応して予め起動したプログラムからこのDOS画面に向けて改行KEYなどを送って先に進めることは出来る様になったのです。 ですが、エラー時の対応が出来ず困っています。 そのDOSで処理するプログラムはエラーの時、ログの出力などは無いようで、ただ画面に「エラーが発生しました。xxxxが原因です。何かKEYを押すと終了します」と表示して停止します。 このDOS画面に表示されたメッセージを読み取って処理を継続するかどうかを判断したいのですが、どの様にすればよいのでしょうか? そのプログラムはメーカ作成のもので、こちらから変更依頼しても受け入れられるようなものではありません。 WindowsXpSP2でVB(ver6.0)による開発です。 WIN32のAPI使用でも結構です。 よろしくお願いいたします。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- nda23
- ベストアンサー率54% (777/1415)
Shellを使う方法と、WindowsAPIを使う方法があります。前者の方が簡単ですが、Dos窓が開くことが欠点です。 Shellを使う方法は以下の通りです。 Declare Sub Sleep Lib "KERNEL32" (ByVal m As Long) Dim WSH, EXE, StdIn, StdOut, StdErr, Txt Set WSH = CreateObject("WScript.Shell") Set EXE = WSH.Exec("C:\~\xxx.exe") '★プログラムの実行 Set StdIn = EXE.StdIn Set StdOut = EXE.StdOut Set StdErr = EXE.StdErr StdIn.Write vbCr '★あらかじめ「何か」をキーインしておく Do While EXE.Status = 0 Sleep 100 '★100ミリ秒間待機 Loop '★プロセス終了コードを判断する場合 If EXE.ExitCode = 0 Then '★標準出力を読み出す場合 Do Until StdOut.AtEndOfStream '◎EOFまでのループ Txt = StdOut.ReadLine() 大抵の場合はプロセス終了コードを参照すれば良いと思います。 WindowsAPIを使う場合はもっと細かい制御が可能ですが、大変難しい処理なので、とりあえずは上記方法を試してみてください。
- equinox2
- ベストアンサー率48% (321/660)
Dos画面で動くプログラムの表示をファイルにリダイレクトして、そのファイルを読む方法ではダメですか? こんな感じのバッチで、メーカー作成のプログラムにキー入力を渡せればうまくいくと思いますが・・ echo A | プログラム名.exe > Result.txt #pauseで待つバッチで試したらうまくいきました・・
お礼
返事が遅くなりました。回答ありがとうございます。 残念ながら、この方式では、途中で何かの入力を求められると対応する方法が無く VBで開発するのを諦めてCでプロセス起動してから、STDIN,STDOUTをコントロールすることにしました。ありがとうございました。
お礼
返事が遅くなりました。回答ありがとうございます。 こんな方法があったのですね。少し時間が経ってしまいましたので、 VBで開発するのを諦めてCのプログラムでプロセス起動してから、STDIN,STDOUTをコントロールすることにしました。ありがとうございました。