• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:コマンドプロンプトを終了せずにリダイレクトするには?)

コマンドプロンプトを終了せずにリダイレクトする方法とは?

chibita_papaの回答

回答No.2

P1.StartInfo.UseShellExecute = False P1.StartInfo.RedirectStandardOutput = True で、マンドプロンプトは終了してしまいます。 仕方がないので、 Private Sub Button12_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button12.Click Dim ret As String = My.Computer.FileSystem.GetTempFileName AppActivate("c:\windows\system32\cmd.exe") SendKeys.SendWait("CD c:\ >" & ret & "{Enter}") While True Try Using sr As New IO.StreamReader(ret, System.Text.Encoding.Default) Console.WriteLine(sr.ReadToEnd) End Using Exit While Catch ex As Exception System.Threading.Thread.Sleep(300) End Try End While IO.File.Delete(ret) End Sub Private Sub Button11_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button11.Click AppActivate("c:\windows\system32\cmd.exe") Dim ret As String = My.Computer.FileSystem.GetTempFileName SendKeys.SendWait("DIR >" & ret & "{Enter}") While True Try Using sr As New IO.StreamReader(ret, System.Text.Encoding.Default) Console.WriteLine(sr.ReadToEnd) End Using Exit While Catch ex As Exception System.Threading.Thread.Sleep(300) End Try End While IO.File.Delete(ret) End Sub は、どうですか? ファイルに書き出すのが気に入らないと思いますが。

abcron
質問者

お礼

回答ありがとうございます。 リダイレクトなしでcmd.exeを実行した後、上記のメソッドを実行してみたところ以下のようなエラーが発生しました。 c:\test>DIR > C:\Documents and Settings\a-shishido\Local Settings\Temp\tmp4E4.tmp 指定されたパスが見つかりません。 c:\test>CD c:\ > C:\Documents and Settings\a-shishido\Local Settings\Temp\tmp4E5.tmp 指定されたパスが見つかりません。 VBに不慣れで原因解析に時間がかかってしまっているため先にご報告させて頂きました。 ご指示頂いたソースの流れとしては、cdやdirコマンドを実行するたびに結果をtmpファイルに出力し、 それをコンソール上に出力するものだと思います。コンソールではなくLabelに出力できれば問題解決できそうなので引き続き解析してみます。

関連するQ&A

  • コマンドライン引数について

    フォームの中にボタン(button1)があり、ボタンを押すと別のアプリケーションを起動するようなプログラムを作っています。 別アプリケーションを起動するのに次のようにShell関数を使ってコマンドライン引数"A"を渡していますが、     Shell("Test.exe A", AppWinStyle.NormalFocus) アプリケーションの終了を確認する必要があり、ProcessコンポーネントのExitedイベントを利用したいので、Shell関数を止めて以下のようなコードにしたいと思っています。 Private Sub Button1_Click(ByVal sender As System.Object, _             ByVal e As System.EventArgs) Handles Button1.Click     Process1.StartInfo.FileName = "Test.exe"     Process1.Start() End Sub Private Sub Process1_Exited(ByVal sender As System.Object, _             ByVal e As System.EventArgs) Handles Process1.Exited     '(ここにアプリケーション終了時の処理コードを記述) End Sub このとき、コマンドライン引数を渡すにはどのようにすればよいでしょうか? どなかたご教授いただけると助かります。どうぞよろしくお願い致します。

  • VBのこのコードの意味を教えてください。(至急)

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click このコードの意味を教えてください。 よろしくお願いします。

  • メモ帳を開いて最大化するには?

    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles cmd_ボタン.Click System.Diagnostics.Process.Start("notepad.exe") End Sub これでメモ帳を開くことはできたのですが、最大化するにはどうすればいいでしょうか? System.Diagnostics.Process.Start("notepad.exe") ,vbMaximizedFocus にすると エラーステートメントの終わりを指定してください。 になってしまいます。

  • コマンドプロンプトの出力をテキストボックスへ表示する方法について

    コマンドプロンプトの出力をテキストボックスへ表示する方法について 現在、VBを使ったプログラミングを行っています。 以下に質問内容を示しますので、回答を宜しくお願いします。 <環境> OS:Windows XP 開発ソフト:VB2008 express edition 質問:コマンドプロンプトの出力をテキストボックスへ表示する方法について リダイレクトを使って、コマンドプロンプトの出力結果をVBのフォーム上(テキストボックス) に表示したいのですが、常に出力が更新されるコマンドの場合、実行後にフリーズが起きてしまいます。 以下の例ではpingを送っていますが、テキストボックスには常にコマンドの出力結果が更新されません。(実行が終わるまで待つ必要がある) 理想としては、pingコマンドを実行したときの結果が、そのままテキストボックス上にリアルタイムに表示されることです。 リアルタイムにテキストボックスにコマンドプロンプトの結果を表示するには、 どのような設定が必要になるのでしょうか? ご教授願います。宜しくお願いします。 ----- 以下サンプルソース ----- Public Class Form1 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim results As String Dim psi As New System.Diagnostics.ProcessStartInfo() 'ComSpecのパスを取得する psi.FileName = System.Environment.GetEnvironmentVariable("ComSpec") '出力を読み取れるようにする psi.RedirectStandardInput = False psi.RedirectStandardOutput = True psi.UseShellExecute = False 'ウィンドウを表示しないようにする psi.CreateNoWindow = True 'コマンドラインを指定("/c"は実行後閉じるために必要) psi.Arguments = "/c ping 192.168.1.1" '起動 Dim p As System.Diagnostics.Process = System.Diagnostics.Process.Start(psi) '出力を読み取る results = p.StandardOutput.ReadToEnd '出力された結果を表示 TextBox1.Text = results 'WaitForExitはReadToEndの後である必要がある '(親プロセス、子プロセスでブロック防止のため) p.WaitForExit() End Sub End Class

  • VB初心者です。コードの書き方が分かりません。

    VB初心者です。 VBで(zのn乗)-(xのn乗+yのn乗)の計算が出来るようにしたいのですが、答えが必ず-1になってしまいます。 Option Explicit On Public Class Form1 Dim x As Long Dim y As Long Dim z As Long Dim n As Long Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Me.Close() End Sub Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged End Sub Private Sub TextBox2_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox2.TextChanged End Sub Private Sub TextBox3_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox3.TextChanged End Sub Private Sub TextBox4_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox4.TextChanged End Sub Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click TextBox5.Text = (z ^ n) - (x ^ n + y ^ n) End Sub End Class 正しいコードの書き方を教えて下さい。 また特定の答えのときにメッセージを表示したいのですが、どうすればいいですか?

  • Elseifのコードが分かりません。(至急)

    急ぎのため再度の質問失礼します。 3つの数字すべてが7のとき、メッセージ1を出し、 どれか2つだけが7のときは、メッセージ2を出し、 どれか1つだけが7のときは、メッセージ3を出し、 どこにも7が含まれていないときは、メッセージ4を出すようにEndifを使って書きたいのですが、正しいコードを教えて下さい。 Public Class Form1 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Randomize() End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Me.Close() End Sub Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click PictureBox1.Visible = False Label4.Visible = False Label1.Text = CStr(Int(Rnd() * 10)) Label2.Text = CStr(Int(Rnd() * 10)) Label3.Text = CStr(Int(Rnd() * 10)) If End If End Sub Private Sub Label1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Label1.Click End Sub Private Sub Label3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Label3.Click End Sub Private Sub Label5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Label5.Click End Sub End Class よろしくお願いします。

  • 無限ループからの脱出用の文について

    **************************************************************** Button2がクリックされたらButton1の中のwhileの無限ループから抜け出すようにしたいのですが、どのようにすればよいのでしょうか。プログラミング初心者な為、初歩的な質問で申し訳ありません。 **************************************************************** Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click   質問1:Button2がクリックされた時のプログラム End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click While True   If 質問2:(Button2がクリックされたとき)Then Exit While End While End Sub

  • このコードはどこが間違っていますか?(至急)

    急ぎのため再度の質問失礼します。 (zのn乗)-(xのn乗+yのn乗)の計算をさせて、答えが0のときにメッセージを表示したいのですが、どのようなコードを書けばいいのでしょうか? Option Explicit On Public Class Form1 Dim x As Long Dim y As Long Dim z As Long Dim n As Long Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Me.Close() End Sub Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged End Sub Private Sub TextBox2_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox2.TextChanged End Sub Private Sub TextBox3_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox3.TextChanged End Sub Private Sub TextBox4_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox4.TextChanged End Sub Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click x = TextBox1.Text y = TextBox2.Text z = TextBox3.Text n = TextBox4.Text TextBox5.Text = (z ^ n) - (x ^ n + y ^ n) If (TextBox5 .Text= 0) Then Label6.Visible = True End If End Sub Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load End Sub Private Sub Label6_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Label6.Click End Sub End Class このコードだと答えが必ず-1になってしまうのですが、どこを直せばいいのでしょうか? 正しいコードを教えて下さい。 よろしくお願いします。

  • WebBrowserについて

    VB2005で、WebBrowserを使おうとしたところ次のような問題が発生しました。 フォームに、WebBrowserを貼り付けてボタンをクリックしたところsubの途中でStopさせるとWebBrowserに表示されません。どうしてでしょうか?教えてください。 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click WebBrowser1.Navigate("http://www.goo.ne.jp/") End Sub の状態だと表示されますが、 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click WebBrowser1.Navigate("http://www.goo.ne.jp/")     Stop End Sub で止めると表示されません。 教えていただけないでしょうか?宜しくお願い致します。

  • Call文 でデバックできません。

    VB初心者です。 Win2003Sarver+SQL2000+VB.Net2008の組合せで作っています。 Call文で下記の様にすると Private Sub Button自動1600_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button自動1600.Click Call Button1600_Click() <--ここでデバックできません。 End Sub Private Sub Button1600_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1600.Click Me.洗浄機記録BindingSource.AddNew() Me.日付TextBox.Text = Now End Sub Call Button1600_Click() デバックできません。 下記の様にすると動きます。 Private Sub Button自動1600_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button自動1600.Click Call B1600() End Sub Private Sub B1600 Me.洗浄機記録BindingSource.AddNew() Me.日付TextBox.Text = Now End Sub Call先に Click(ByVal sender As System.Object, ByVal e As System.EventArgs) が あると引数か何かが必要になるのでしょうか。 ご存知の方教えてください。