Shell command.com の 出力結果を
ファイルに落とすのでなく
直接、文字列変数に入れたいのですが
何か方法あれば、教えて下さい
環境)VB6.0SP6 WIN2000
です
まず、Win2000であれば、Command.comではなくCMD.EXEのはずです。
「CMD.EXEの標準出力をファイル経由ではなく直接VB6で取り込みたい」、と解釈します。
で。
まず、CMD.EXEはシェルですので、たとえば「ipconfig<ENTER>」とした場合、出力はCMD.EXEではなくipconfig.exeが行います。
この場合は、ipconfig.exeは「外部コマンド」という扱いになりますね。
外部コマンドの出力を取得したい場合のコードは、ぬぞうさん(でいいのかなー)が公開されています。
注意書きをよく読んでご使用ください。
さて、「dir」などの内部コマンドの場合はどうするか?
「cmd /c "<コマンド>"」で、CMD.EXEをCallしてやればいいんですね。
たとえば、「cmd /c "dir c:\windows"」といぅ感じです。
上記の例では「"」はなくても動作しますが、ないとダメな場合がありますので、必ずつけておくと無難です。
複数の外部/内部コマンドを取り混ぜて一括で出力しその結果を取得したい場合は、バッチファイルを作って流してやると便利です。
「cmd /C "c:\test.bat"」といぅ感じですね。
パイプ使うと面倒なので、時間にシビアでない処理なら、
出力をファイルにリダイレクトし、
VB側からそのファイルを読むほうが簡単でいいかも。
ノ<実は俺もstdoutの出力ほしくてリンク先様の様にガリガリ書いたんだが…
結果はCreateProcessの失敗でorz。
で、今回もorzだったw;
権限の関係なのかちょと不明(っていうかそれ以外に考えられないか…どこだろ)。
だけど、諦めてたらWSHで出来るらしいと聞きました。
…聞いただけでどこにあるかは分かりませんが(orz
※標準でstdout持ってるようなのを中継して、パイプでつなげて受け取るとか…ダメか(orz
ちなみに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
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 "えらー!"
でできたよ。
すみませんでした
ネットの調子が悪く連絡取れませんでした
さるべーじさん、Sayさん、ガッさん、id_rsa++さん
ありがとうございました
今回のコマンドは、PINGだったので
さるべーじさんの教えてくれた
外部コマンドの方法でします
> id_rsa++さんへ
さるべーじさんが教えて下さったリンク先のに突っ込んでみましたが、
やっぱりプロセスが作成できませんでした。
…んー;
ガッさん汚いソースで良ければ、差し上げますがUPできる場所あります?メールでもいいけど。さすがに全部ここにコピペするのはシンドイです・・・
> id_rsa++さん
んー、ソースが欲しいのもあるんですけど、あいにく公開できるアドレスの持ち合わせがありません;
大変残念ですが、どうもありがとうございました。
では。
※Win9xなら美味しく出来たのかも…んーむ。
Sayさんが書いたWSHを使ったコードは問題なく動くので、
…別プロセス空間で取得して、どこかに窓口設ければ簡単にできる…?
ま、がんばりますw;
ごめん。うちのサーバー忘れてた・・・
http://inaku-world.ddo.jp/vb-dos.zip
よかったら、参考にしてください。
> id_rsa++さん
( ´Д`)<ぁΣ
…う、うう、動いたっ!?
スゴっ!ありがとうございますっ!!
大変参考になりました、大切に大切に解剖しますw(ぇ
本当にありがとうございました!
※さて、何で俺が書いたら動かなかったのやら…あははhhh
あははhhhh…(TдT) アリガトウ
ツイート | ![]() |