Shell command.com の 出力結果について

解決


GG  2005-02-25 21:45:46  No: 119925

Shell command.com の  出力結果を
ファイルに落とすのでなく
直接、文字列変数に入れたいのですが
何か方法あれば、教えて下さい
環境)VB6.0SP6  WIN2000
です


さるべーじ  2005-02-27 02:36:54  No: 119926

まず、Win2000であれば、Command.comではなくCMD.EXEのはずです。
「CMD.EXEの標準出力をファイル経由ではなく直接VB6で取り込みたい」、と解釈します。

で。
まず、CMD.EXEはシェルですので、たとえば「ipconfig<ENTER>」とした場合、出力はCMD.EXEではなくipconfig.exeが行います。
この場合は、ipconfig.exeは「外部コマンド」という扱いになりますね。
外部コマンドの出力を取得したい場合のコードは、ぬぞうさん(でいいのかなー)が公開されています。

http://tanuzou.com/nuzou/wiki/index.php?VB%A4%C7%B3%B0%C9%F4%A5%B3%A5%DE%A5%F3%A5%C9%A4%CE%C9%B8%BD%E0%BD%D0%CE%CF%BC%E8%C6%C0

注意書きをよく読んでご使用ください。

さて、「dir」などの内部コマンドの場合はどうするか?
「cmd /c "<コマンド>"」で、CMD.EXEをCallしてやればいいんですね。
たとえば、「cmd /c "dir c:\windows"」といぅ感じです。
上記の例では「"」はなくても動作しますが、ないとダメな場合がありますので、必ずつけておくと無難です。

複数の外部/内部コマンドを取り混ぜて一括で出力しその結果を取得したい場合は、バッチファイルを作って流してやると便利です。
「cmd /C "c:\test.bat"」といぅ感じですね。


Say  2005-02-27 02:45:10  No: 119927

パイプ使うと面倒なので、時間にシビアでない処理なら、
出力をファイルにリダイレクトし、
VB側からそのファイルを読むほうが簡単でいいかも。


ガッ  2005-02-27 02:55:29  No: 119928

ノ<実は俺もstdoutの出力ほしくてリンク先様の様にガリガリ書いたんだが…
結果はCreateProcessの失敗でorz。
で、今回もorzだったw;
権限の関係なのかちょと不明(っていうかそれ以外に考えられないか…どこだろ)。
だけど、諦めてたらWSHで出来るらしいと聞きました。
…聞いただけでどこにあるかは分かりませんが(orz

※標準でstdout持ってるようなのを中継して、パイプでつなげて受け取るとか…ダメか(orz


Say  2005-02-27 04:24:20  No: 119929

ちなみにVB6でWSH使うならこんなかんじ
    'Windows Scripting Host Object Modelを参照設定して
    Dim WSHShell   As New IWshShell_Class
    Dim oWshEcec As IWshRuntimeLibrary.WshExec
    Set oWshEcec = WSHShell.Exec("cmd.exe /C Dir c:\")
    MsgBox oWshEcec.StdOut.ReadAll


id_rsa++  2005-03-01 04:42:24  No: 119930

Dim lpStartupInfo As STARTUPINFO

    With lpStartupInfo
        .cb = Len(lpStartupInfo)
        .dwFlags = STARTF_USESHOWWINDOW Or STARTF_USESTDHANDLES
        .wShowWindow = SW_HIDE
        .hStdInput = hInpRead
        .hStdOutput = hOutWrite
        .hStdError = hErrWrite
    End With
    If (CreateProcess(vbNullString, Environ$("COMSPEC"), ByVal 0&, ByVal 0&, _
                        1&, 0&, ByVal 0&, App.Path, lpStartupInfo, lpProcInfo) = 0) Then MsgBox "えらー!"
でできたよ。


GG  2005-03-01 19:57:50  No: 119931

すみませんでした
ネットの調子が悪く連絡取れませんでした

さるべーじさん、Sayさん、ガッさん、id_rsa++さん
ありがとうございました

今回のコマンドは、PINGだったので
さるべーじさんの教えてくれた
外部コマンドの方法でします


ガッ  2005-03-01 20:23:52  No: 119932

> id_rsa++さんへ
さるべーじさんが教えて下さったリンク先のに突っ込んでみましたが、
やっぱりプロセスが作成できませんでした。
…んー;


id_rsa++  2005-03-02 04:33:30  No: 119933

ガッさん汚いソースで良ければ、差し上げますがUPできる場所あります?メールでもいいけど。さすがに全部ここにコピペするのはシンドイです・・・


ガッ  2005-03-02 04:55:48  No: 119934

> id_rsa++さん
んー、ソースが欲しいのもあるんですけど、あいにく公開できるアドレスの持ち合わせがありません;
大変残念ですが、どうもありがとうございました。

では。

※Win9xなら美味しく出来たのかも…んーむ。
  Sayさんが書いたWSHを使ったコードは問題なく動くので、
  …別プロセス空間で取得して、どこかに窓口設ければ簡単にできる…?
  ま、がんばりますw;


id_rsa++  2005-03-02 05:11:06  No: 119935

ごめん。うちのサーバー忘れてた・・・
http://inaku-world.ddo.jp/vb-dos.zip
よかったら、参考にしてください。


ガッ  2005-03-02 05:27:56  No: 119936

> id_rsa++さん
( ´Д`)<ぁΣ
…う、うう、動いたっ!?
スゴっ!ありがとうございますっ!!
大変参考になりました、大切に大切に解剖しますw(ぇ
本当にありがとうございました!

※さて、何で俺が書いたら動かなかったのやら…あははhhh
  あははhhhh…(TдT) アリガトウ


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

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






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