• ベストアンサー

Execメソッドについて

お世話になります。 VBScriptについての質問です。 カテゴリがなかったので、こちらに書いてます。 DOS画面から、cscriptで別PGMを実行するのに Execメソッドを利用して、コマンド実行を行っていますが 処理をループでまわしているため、画面上にDOS画面が バサバサと一瞬あがってしまいます。 これを回避する方法ってありますか? (非表示にしたり、最小化したり。。) コマンド実行の戻り値をそのまま変数に受取りたいため Runメソッドは使えないと思っています。

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

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

Runメソッドでも戻り値は取れるので、おそらく戻り値ではなく、標準出力を受け取りたいと言うことではないかと推測します。 Execメソッドでは非表示は出来ないと思うので、そのコマンドの標準出力をファイルにリダイレクトするバッチスクリプトを書いて、そのバッチスクリプトをRunメソッドで起動してウィンドウを隠し、Runメソッド終了後にそのファイルを読むと言うことくらいしかできないと思います。

jp000
質問者

お礼

notnot様 ご回答ありがとうございます。 その通りです。言い回しが悪かったです。 私が言っている戻り値とは標準出力の結果値です。 やはりExecメソッドでは、非表示オプションなるものは ないのですね。ありがとうございます。 もしExecメソッドで出来ないのなら、私もその方法を 考えてました。

その他の回答 (1)

  • axel_eye
  • ベストアンサー率64% (145/226)
回答No.1

私は、VBScriptもcscriptも知らないので参考までにですが、 Runメソッドを使えないと言う事は、例えば以下のサイトの 様な事はダメという事ですよね。 http://blog.livedoor.jp/akf0/archives/51390072.html 質問者様が書かれているように、 Execコマンドは外部コマンドを実行するコマンドの ようですから、 基本DOSプロンプトを非表示にするには、 VBScriptから制御するのではなく、 外部コマンドにDOSプロンプトを非表示にするオプションが 搭載されていなければ難しいと思います。 また、外部コマンドから現状は引数を上手く取れているかと 思いますが外部コマンドがきちんと『終了』した事を確認できる ロジックもVBScript内に実装する方が無難です。 なぜかと言うと、外部プログラムはVBScriptと非同期に動くためです。 今回は、外部プログラムは1個なのかもしれませんが、 外部プログラムが複数種類あった場合、これらがVBSCriptのExecで 実行した順序で終了するとは限りません。 終了が検知できなければ、引数を確実に取得できるかわからないと いうことです。 外部プログラムが1個であっても、多重起動が許可されていて それぞれが、異なる時間で終了する事があれば同じ事です。 もし、それでもやるのであれば、 ・起動したDOSプロンプトのClassを取得 ・取得したClassの非表示、最小化ボタンのIDを取得 ・ボタンIDに対して、ボタンを押すコマンドを送信 などで出来るのではないでしょうか? VBScriptに上記のようなメソッド(関数)が準備されているか 私は知りません。 その他の手段としては、自前で外部プログラムが行っている事を VBScript内に実装することが、一番安全かつ堅牢なプログラムに なると思います。 外部プログラムで元々、実装されていない(DOSプロンプトの非表示など)を 制御する事は、結局の所、そういう事のような気がします。

jp000
質問者

お礼

axel_eye様 ご回答ありがとうございます。 Runメソッドを使えないというのは、戻り値ではなく 標準出力の結果を引き取りたいという要件になります。 実行するVBSについては、自分が作成したプログラムでは ないため、吸収することが出来ずにやむを得ずコマンド実行を している次第です。 Sendkeyを使えば、示唆されている内容も可能かと思います。 大変勉強になりました。 参考にさせていただこうと思います。

関連するQ&A