[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 2chのread.cgiへ]
Update time : 09/04 11:48 / Filesize : 232 KB / Number-of Response : 924
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

くだすれVB6.0以前(超初心者向け)



1 名前:d mailto:age [2008/03/30(日) 09:01:59 ]
このスレッドはVBについて、
他のスレッドでは書き込めない超低レベル、
もしくは質問者自身何が何だか分からない質問を勇気を持って書き込むスレッドです。
VB使いが優しくコメントを返しますが、
お礼はVBの布教はしなくてよいので、初心者の救済をお願いします


前スレ
くだすれVB6.0以前(超初心者向け)
pc11.2ch.net/test/read.cgi/tech/1165574205/

899 名前:デフォルトの名無しさん mailto:sage [2009/05/29(金) 00:45:51 ]
質問です。
コマンドプロンプトでの入出力を逐次行いたいと思っています。

以下のようなサンプルを書いてみたのですが、うまくいきませんでした。

ipconfigの結果の最後の行を取得したのち、
もう1行読みに行ってしまいそのまま処理戻り待ちになってしまいます。
この時コマンドプロンプトを手動で閉じると制御が戻り処理が再開されました。

何がいけないのでしょうか?


Dim objWShell As Object
Dim objExec As Object
Set objWShell = CreateObject("WScript.Shell")
Set objExec = objWShell.Exec("%ComSpec%")

objExec.StdIn.WriteLine "ipconfig"

Do Until objExec.StdOut.AtEndOfStream
Debug.Print objExec.StdOut.ReadLine
Loop

objExec.StdIn.WriteLine "Exit"

Set objExec = Nothing
Set objWShell = Nothing


900 名前:デフォルトの名無しさん [2009/05/29(金) 01:36:03 ]
>>899
手動で閉じたときにエラー発生しなかった?
何でエラーになったか考えればこんな感じにたどり着くと思うよ。

objExec.StdIn.WriteLine "ipconfig" + vbCrLf + "Exit"


901 名前:デフォルトの名無しさん mailto:sage [2009/05/29(金) 01:59:45 ]
>>900
助言ありがとうございます
その通りでした。
ですが、実のところ途中でExitしたくないのです

コマンドプロンプトを複数回呼び出すたびにウインドウが出てしまうためこれをさせたくないのです
元はといえば自由に操作可能なコマンドプロンプトを非表示で呼び出せれば良いのですが・・・
そのために考えたコードが上記のものでした

902 名前:デフォルトの名無しさん mailto:sage [2009/05/29(金) 07:53:09 ]
パイプのようなものを使えばいいのでは

903 名前:デフォルトの名無しさん [2009/05/29(金) 12:24:36 ]
コンソールアプリケーションには疎いのですが、
パイプのようなものとは記号「>」でファイル出力するという意味でしょうか?

中間に入力などがあり分岐したい場合に対処できないと思ったのと
ファイルへの入出力を伴うのは処理速度がストレージ性能に依存するため避けたのですがどうでしょうか?

904 名前:デフォルトの名無しさん mailto:sage [2009/05/29(金) 12:54:06 ]
VB パイプ
などでぐぐれば多少は出てくるでしょうに、それすらしないんですか

905 名前:デフォルトの名無しさん [2009/05/29(金) 13:07:49 ]
処理速度とか気にしてる割にはシェルの起動時間は気にならないんですね

めんどくさいから素直に何がしたいのか書けよ


906 名前:899 mailto:sage [2009/05/29(金) 13:16:59 ]
すいませんでした
ググって来ました
私が言っていたのはリダイレクトだったのですね、失礼しました

> 「標準入出力」というのは、ユーザーが何もしなくてもOSが「標準で」用意してくれる入力先・出力先のことです。
> 「リダイレクト」によって標準入出力をファイルに変更したり、
> 「パイプ」によってあるコンソールアプリの標準出力を別のコンソールアプリの標準入力につなげたり出来ます。

・・・このパイプのようなものを実際どう組み込んだらよいのでしょうか?

>>899ソースでobjExec.StdOut.ReadLineの場所で止まってしまう理由が分かりません
/cをつけて自動終了するようにして使うしかないのでしょうか?
StdInやStdOutをどのように捕らえたら良いのかお教え願えませんでしょうか?

907 名前:デフォルトの名無しさん mailto:sage [2009/05/29(金) 13:24:06 ]
ぐぐれば一番最初に出てきただろうに、なんなのこいつ



908 名前:899 mailto:sage [2009/05/29(金) 13:34:33 ]
>>905
シェルの起動時間とはなんでしょうか?

CreateObjectの事でしょうか?
これは一度作成したのちずっと保持する予定なので気にしていません

コマンドプロンプトのExec呼び出しの事でしょうか?
こちらも一度しか呼び出さないようにして再利用する事を考えていて、その結果このような質問に至りました。

>何がしたいのか
いくつかのCUIアプリケーション(コンソールコマンドの結果)のGUI化です
ExecメソッドではStdIn、StdOutというもので制御が可能と知ったので、
これを使ってコマンドプロンプトもどきを作れないかと考えました。
これができればいろんなもののGUI化が出来るだろうと思いテストソースを書きました。

>>907
すいません


909 名前:デフォルトの名無しさん mailto:sage [2009/05/29(金) 13:36:41 ]
ほぼそのもののソースがググると出てくるんだが
まだ不満があるのか

910 名前:デフォルトの名無しさん mailto:sage [2009/05/29(金) 13:37:10 ]
ごめんなさい、それはどこですか?

911 名前:デフォルトの名無しさん mailto:sage [2009/05/29(金) 13:40:52 ]
>>909
お前うぜーよ
URL貼る気ねーならくるな

912 名前:デフォルトの名無しさん mailto:sage [2009/05/29(金) 13:46:28 ]
MSDNライブラリのStdInプロパティの説明くらい読めばいいのに

913 名前:899 mailto:sage [2009/05/29(金) 14:04:21 ]
>>912 ありがとうございます

このあたりの事でしょうか?
ttp://msdn.microsoft.com/ja-jp/library/cc364385.aspx
一応MSDNのこのあたりは関連するキーワードのものを含め何度か読み返してはいたのですが、
前述の無反応になる件の答えが見出せず困っています・・・
アホですいません

Do Until objExec.StdOut.AtEndOfStream
の判定ではポインタが最後に到達していないはずなのですが
StdOut.ReadLineメソッドを呼び出すと処理が戻らず(エラーも出ず)待機してしまう理由がどうしてもわかりません

914 名前:デフォルトの名無しさん mailto:sage [2009/05/29(金) 15:33:52 ]
いちいち自分でググってそのページを見てるくせに、
ここではほのめかしの回答しかしない屑。

915 名前:デフォルトの名無しさん mailto:sage [2009/05/29(金) 15:46:09 ]
先にexitを送らない限り一生終わらない(AtEndOfStreamはFalseのまま)
Dim objWShell
Dim objExec
Set objWShell = CreateObject("WScript.Shell")
Set objExec = objWShell.Exec("%ComSpec%")
objExec.StdIn.WriteLine "ipconfig"
objExec.StdIn.WriteLine "exit"
Do Until objExec.StdOut.AtEndOfStream
MsgBox objExec.StdOut.ReadLine
Loop

916 名前:デフォルトの名無しさん mailto:sage [2009/05/29(金) 16:07:08 ]
ipconfigの出力に[[hoge]]があると誤判定で終了してしまうが
Dim objWShell' As Object
Dim objExec' As Object
Set objWShell = CreateObject("WScript.Shell")
Set objExec = objWShell.Exec("%ComSpec%")
objExec.StdIn.WriteLine "ipconfig"
objExec.StdIn.WriteLine "echo [[hoge]]"
Do Until objExec.StdOut.AtEndOfStream
Dim sLine' As String
sLine = objExec.StdOut.ReadLine
If sLine = "[[hoge]]" Then Exit Do
MsgBox sLine
Loop
If Not objExec.StdOut.AtEndOfStream Then objExec.StdIn.WriteLine "exit"


917 名前:デフォルトの名無しさん mailto:sage [2009/05/29(金) 21:10:27 ]
>>915
ありがとうございます
相手(コマンドプロンプト)が終了しない限り、そのTextStreamは「Endがない」動作をするのですね

私のサンプルで停止していたのは、この「現在まだない次の行」を取得中で待機している、という事でしょうか
Exitを打たずともスマートな解決方法があるのではないかと思っていましたが、
簡単にはいかないようでその理由も大体把握できました

「Exec呼び出し先が動作中の時は、StdOutの最終行がAtEndOfStreamで検出できず、
 またStdOut.Read系で現在の最終行を超えて読もうとしてもエラーも出ず新たな行が入るまで待機してしまう」
と言う事ですね。
サンプルまで付けて頂いて、アホでも理解しやすく配慮していただき助かりました



>>916 回避策ありがとうございます
なるほど、未知の最終行を読むこと自体を回避するのですね
番兵を置いているところで目から鱗でした!
これならコマンドプロンプトをExitさせずに逐次StdOutを監視できそうです



918 名前:デフォルトの名無しさん [2009/06/07(日) 13:02:33 ]
誘導されてきました

何年か前の話です、バカでも使える簡単な言語を紹介してくれと知り合いに聞いたところ
「VBが良い、中学生でも扱える言語」といわれ家電量販店でVBを購入。
たしか「N88ベーシックと難易度は変わらない」とも言われました。N88ベーシックがなんなのか
よくわかりませんが似たようなベーシック言語は触ったことがあるのでVBもそんなものだと思って買いました
購入してそのまますっかり忘れて押入れの中に放置していたのですが、今日引っ張り出してきてインストール
しようとしたのです、するとIISとフロントベージと言うものがインストールされていないので
インストールできないとの表示が・・・
IISはアパッチのようなものだとしてフロントページが何なのか良くわかりません、調べてみると
ホームページビルダーのようなものらしいけどこれは買わないといけないのでしょうか?。
そもそも知り合いの説明がずいぶん間違っているようにしか思えないのですが。
昔のベーシックの難易度ってフォートランぐらいだったと思うのですが。
VBとやらはインストールの段階で知らない専門用語だらけです。
これはいったいどういうことなのでしょう?えらい人教えてください。

919 名前:デフォルトの名無しさん [2009/06/07(日) 13:04:28 ]
ヴァージョンは2003
OSのバージョンはWindows2000です

920 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 13:04:32 ]
気にせずインストールを続ければOK

921 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 13:40:47 ]
そのFrontPageはOfficeのFrontPageではなく、FrontPage 2000 Server Extensionsの方だな

ASP.netをやらないなら入れる必要なし

IISとFrontPage 2000 Server Extensionsを入れるなら
コントロールパネル→プログラムの追加と削除→Windowsコンポーネントの追加と削除
から、インストールが出来る

VB6スレだから、誘導が間違ってたんだろうけど
質問する場合は最初からバージョンは書いておいた方がいいよ

922 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 21:50:22 ]
FrontPage 2000 Server Extensions
てそもそも何のために導入しなきゃいけないんだ?
いまいちよくわからずに入れていたんだが気になってきた

923 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 21:59:25 ]
WebDAV ではないんだけど、あんな感じで Web サイト上の
コンテンツを更新するのに必要なんじゃなかったかな。






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<232KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef