独学でVisual Basicの勉強を始めるなら『Microsoft Visual Basic 2010 Express』をインストールしよう!

このQ&Aのポイント
  • 『Microsoft Visual Basic 2010 Express』という体験版をインストールして、独学でVisual Basicの勉強を始めてみました。
  • しかし、DOSプロンプトへの標準出力を変数・配列に代入する方法がわからず困っています。
  • ご存知の方がいらっしゃいましたら、教えていただけないでしょうか。
回答を見る
  • ベストアンサー

『Microsoft Visual Basic 2010 Expres

『Microsoft Visual Basic 2010 Express』という体験版をインストールして 独学でVisual Basic の勉強を始めてみましたが、DOSプロンプトへの 標準出力を変数・配列に代入する方法がわかりませんでしたので、お詳しい かたがいらっしゃいましたら、お願いいたします。 <作成しているffmpegを動作させるというプログラム> Dim Prog_path As String Dim Dir_mini As String Private Sub TextBox1_DragDrop(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles TextBox1.DragDrop TextBox1.Text = "" 'ドロップされた内容を表示する Dim idx() As String = e.Data.GetData(DataFormats.FileDrop, False) Dim FileName_1 As String Dim FileName_2 As String Dim OutFile_mini As String For i = 0 To idx.Length - 1 TextBox1.Text = "" For j = i + 1 To idx.Length - 1 ' 順番待ちファイル表示の為、j = i + 1 から開始 FileName_1 = IO.Path.GetFileName(idx(j)) ' Pathを除いたファイル名の取得 TextBox1.Text = TextBox1.Text + (FileName_1 & vbNewLine) Next TextBox1.Refresh() ' 順番待ちファイル情報更新 FileName_2 = IO.Path.GetFileNameWithoutExtension(idx(i)) ' ファイル名の拡張子無し 'ffmpeg 実行 OutFile_mini = Dir_mini & "\" & FileName_2 & ".MP4" ' 出力Pathとファイル名 TextBox6.Text = OutFile_mini TextBox6.Refresh() ' 処理中ファイル情報更新 CreateObject("WScript.Shell").Run(Prog_path & "\cores\ffmpeg -y -maxfr 30 -i """ & idx(i) & """ -bitexact -vcodec h264 -coder 1 -bufsize 128 -g 250 -s 160x120 -b 10 -acodec aac -ac 2 -ar 48000 -ab 64 -f mp4 """ & OutFile_mini & """", 0, True) ' 第2パラメータは0で非表示1で通常表示2で最小化3で最大化、第3パラメータはTrueで順次、Falseで前処理の終了待たず Next TextBox6.Text = "" TextBox6.Refresh() ' 全て処理後、TextBox6の内容をクリア End Sub 複数ファイルを処理する場合に単純に『Shell』を使ってしまいますと非同期で どんどん処理されてしまいますので『CreateObject("WScript.Shell").Run』と いうもので、処理の順番待ちをしてくれるようにしていますが、この中に書かれて います『Prog_path & "\cores\ffmpeg"』というプログラムは、DOS窓表示を させますと、処理の進捗状況を表示してくれます。 複数ファイルを処理するという前提で、ffmpegの実行は順番待ちをして、しかも 個々のffmpegの標準出力結果は非同期に参照をして、変数に代入をして処理する (若しくはTextBox7などを作成して表示させる)という方法にしたいのですけれど…

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

  • ベストアンサー
  • mindatg
  • ベストアンサー率48% (110/227)
回答No.1

1.Execを使う方法 結構面倒くさい http://msdn.microsoft.com/ja-jp/library/cc364375.aspx 2.Processクラスでコマンドプロンプトをしっかり制御する .netなら普通はこっち http://www.atmarkit.co.jp/fdotnet/dotnettips/657redirectstdout/redirectstdout.html

kaduno
質問者

補足

ありがとうございます デバッグ用に、ネット検索でヒットしました記述を少し変更しまして 以下のようなTextBox7に出力させるプログラムを作ってみますと動く のですが、ffmpegを動かした場合のDOSウインドウへの標準出力は、 同じ様な方法ではダメでした。 StdOutに値が無いのか別の要因なのか、何も表示してくれません。 ffmpegの標準出力は進捗状況を表す為に、内容が逐次変更されていく ためでしょうか それですので、一般的な方法ではなさそうです Dim WSH As Object, wExec As Object, sCmd As String, Result As String WSH = CreateObject("WScript.Shell") sCmd = "dir C:\" wExec = WSH.Exec("%ComSpec% /c " & sCmd) Do While wExec.Status = 0 System.Threading.Thread.Sleep(100) Loop Result = wExec.StdOut.ReadAll TextBox7.Text = Result wExec = Nothing WSH = Nothing

関連するQ&A

  • TextBoxの文字がかけてしまうのですが VB.NET

    VB.NET FrameWork1.1の環境なのですが、 Declare Function WritePrivateProfileString Lib "KERNEL32.DLL" Alias "WritePrivateProfileStringA" ( _ ByVal lpAppName As String, _ ByVal lpKeyName As String, _ ByVal lpString As String, _ ByVal lpFileName As String) As Integer このAPIを使ってファイルに文字列を記録しているのですが、 TextBoxに表示したファイルのフルパスを記録すると このAPIを使った直後にそのTextBoxの文字の後半が欠けてしまいます。 短いパス名なら大丈夫なのですが、長いパス名の場合に欠けてしまいます。 試しに Dim a As String = TextBox1.Text WritePrivateProfileString("TextBox", "1", a, FileName) Console.WriteLine(a) としても同じく欠けてしまいます。 変数aの宣言の型をString ではなく Object にすると 欠けなくなるのですが、変数aやTextBoxの内容は読み取った だけなのになぜ書き換えられてしまうのでしょうか? どの場合でもファイルへの記録は正常に出来ています。 何か問題点などありましたらご教授いただけると助かります。

  • Visual Sutudio 2003で、文字を反転させるプログラムが正しく動きません。

    Visual Sutudio 2003で、困っています。 TextBox1に、文字を入力してButton1をクリックすると、入力された文字が反転されてLabel3に、表示されるプログラムを作ってみたのですが、上手く動きません。 例えば、「TextBox1」と入力してボタンをクリックすると、「1xoBtxeT」と表示させたいのですが、「1ote」と一文字置きに表示されてしまいます。 「Button1をクリックした時のプログラム」 Dim moji, kekka As String Dim i As Integer Label3.Text = "" moji = TextBox1.Text Label3.Text = moji.Substring(moji.Length - 1, 1) For i = 2 To moji.Length  Label3.Text &= moji.Substring(moji.Length - i, 1)  i = i + 1 Next End Sub 正しく表示させるには、どうすればいいのでしょうか?分かる方、宜しくお願いします。

  • Visual Basicで作成したプログラムをExcelに出力したいです

    Visual Basic. NET 2003を使っています。 「N期間(年間)と利子率(%)を入力し、1年目からN年目までの元金の価値の倍率のリストを作成するプログラムを作成し、出力データをMS-Excelのカッマ区切り形式(ファイル名.csv)に保存すること」を、授業の課題として出されました。大学の授業って大変ですね。。。 貯金した元金の価値の倍率は以下の式で表されます。 N年後の価値の倍率=(1+利子率)二乗 N期間 自分でここまではやってみました。 Dim principal As Integer Dim period As Integer Dim interest As Double Dim value As Double 'Input principal = Val(TextBox1.Text) period = Val(TextBox2.Text) interest = Val(TextBox3.Text) / 100 'Calculation value = principal * ((1 + interest) ^ period) 'Insurt data Const filename As String = "value.csv" FileOpen(1, filename, OpenMode.Output) WriteLine(1, period, interest, value) FileClose(1) お昼からずっと格闘しています。。。そろそろお腹がすいてきました(笑)もう困り果ててしまったので、ここに質問させていただきます!! どなたか回答してくださればうれしいです♪ よろしくお願いします!!

  • htmlソースをテキストボックスに表示させて20行目の10文字の数字を取得したい。

    恐れ入ります。 http://www.microsoft.com/japan/msdn/vbasic/migration/tips/WebClient/ このページのコードを使わせてもらって htmlソースをテキストボックスに表示することはできました。表示させたテキストボックスの20行目の10文字の数字を取得したいのですが、どのようにすれば取得できるんでしょうか?val関数も1行目だけみたいですし・・・。ちなみに20行目は var strReqHomeID = "0000100012"; という具合になっていて  0000100012 を取得したいのです。 -------------------以下コード---------------- Imports System Imports System.Text Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Try Dim download As New Net.WebClient() Dim temp As Byte() = download.DownloadData(TextBox1.Text) Dim change As Text.Encoding = Encoding.Default TextBox2.Text = change.GetString(temp) Dim filename As String = System.IO.Path.GetFileName(TextBox1.Text) If filename = "" Then filename = "Temp.html" End If Dim strPath = My.Computer.FileSystem.SpecialDirectories.Desktop strPath = strPath + "\" + filename download.DownloadFile(TextBox1.Text, strPath) WebBrowser1.Navigate(TextBox1.Text) Catch ex As Exception Throw End Try End Sub

  • EXCEL2007のVBAを使って、テキストファイルを読み込んで別のテ

    EXCEL2007のVBAを使って、テキストファイルを読み込んで別のテキストファイルを作って書き込むというコードを書きましたが、新しく出来たテキストファイルの末尾に、もともとのファイルには無かったスペースが追加されてしまいます。 原因と対策を教えて頂きたいです。 ------------------------------------------------------- Dim FileName1 As String Dim FileName2 As String Dim FileNumber1 As Integer Dim FileNumber2 As Integer Dim Data As String FileName1 = Application.GetOpenFilename("Text Files (*.txt), *.txt") FileName2 = Application.GetSaveAsFilename(, "Text Files (*.txt), *.txt") Data = Space(FileLen(FileName1)) FileNumber1 = FreeFile Open FileName1 For Binary As #FileNumber1 Get #FileNumber1, , Data Close #FileNumber1 'この間に"Data"内容を処理するコードを入れる予定 FileNumber2 = FreeFile Open FileName2 For Binary As #FileNumber2 Put #FileNumber2, , Data Close #FileNumber2 ------------------------------------------------------- このコードで1284バイトのテキストを読み込ませると末尾にスペースが追加されて1918バイトになってしまいました。 "Data"の内容を表示させてもスペースはなく、Len関数で大きさを調べても1284バイトです。

  • エクセルVBAのユーザーフォームにセルデータを

    Excel2007を使っています。 VBA初心者ですがユーザーフォームのテキストフォームにエクセル内のセルデータを表示させたいと考えています。 以下のコードをユーザーフォームのコードに書いてユーザーフォームを走らせましたがユーザーフォームは表示するのですがデータがまったく表示されません。 どなたかご教授いただけませんでしょうか。 Sub Farst() Dim Data1 As String Dim Data2 As String Dim Data3 As String Dim Data4 As String Dim Data5 As String Dim Data6 As String Dim Data7 As String Dim Data8 As String Dim Data9 As String Dim Data10 As String Dim ActiveRow As String ActiveRow = 4 With Worksheets("MDH,MDO") Data1 = .Cells(ActiveRow, 1) Data2 = .Cells(ActiveRow, 2) Data3 = .Cells(ActiveRow, 3) Data4 = .Cells(ActiveRow, 4) Me.TextBox1連番.Text = Data1 Me.TextBox2品番.Text = Data2 Me.TextBox3品番2.Text = Data3 Me.TextBox4品番3.Text = Data4 End With End Sub

  • VB2005でのファイル操作について

        Dim filedata As String Dim fileNum As Integer Dim fileName As String Dim i As Integer fileName = "C:\Paradata.txt" fileNum = FreeFile() FileOpen(fileNum, fileName, OpenMode.Output) For i = 0 To 9 filedata = data(i, 0) & "," & data(i, 1)・・・・・ PrintLine(fileNum, filedata) Next FileClose あるボタンを押しますと上記のようにテキストファイルにデータを保存しようとしているのですが、1回目のボタンクリックではエラーが無いのですが2回目以降は"別のプロセスで使用されているため、プロセスはファイル 'C:\Paradata.txt' にアクセスできません。"のエラーが発生してしまいます。いろいろと調べているのですがまだわからないのでどこがおかしいか教えてください。よろしくお願い致します。

  • ノーツでのファイル処理

    お世話になります。 sinsuke-_- です。 ノーツでのファイル処理に関して教えてください。 ◆実行したいこと  ノーツにてCSVファイルを作成し、あるサーバのディレクトリに保存する処理を行いたいのです。 今実装されているScriptで保存先を、\\XXX.X.X.XXX\D$\print\ファイル名(XXX.X.X.XXX=IPアドレス)としています。 あるクライアントPCだと上手く上記の箇所に保存できるのですが、あるクライアントPCだと上手く保存できません。(U0001 ファイルを開くことができません。) 任意のサーバの場所へクライアントからファイルを保存するためには、どのようなScriptとどのような環境が必要でしょうか? 今実装されているScriptを載せさせていただきます。 ----------------------------------------------------------- Dim OutPath As String 'ファイル保存先 Dim FileName As String 'ファイル名 Dim WData As String 'ファイル書込み内容 FileName = Year(Now()) & Month(Now()) & Day(Now()) & Hour(Now()) &_ Minute(Now()) & Second(Now()) & ".csv" Outfile = "\\XX.X.X.XXX\D$\Print\" & FileName Filenum% = Freefile() Open Outfile For Output As Filenum% '========================= 'csvファイル書出し '========================= While Not doc Is Nothing '書出し処理 Wend Close Filenum%

  • フォルダやドライブ変更するとリネームできなくなります。

    現在VB6でファイルリネームツールを作成しています。 DriveListBox・DirListBox・FileListBox・TextBox・コマンドボタンを配置しています。 ドライブ・ディレクトリ・ファイルを順に選択して、選択したファイル名をテキストボックスに表示させ、ファイル名を テキストボックスで直接編集してコマンドボタンでリネームを実行しています。 以下のコードで実行すると、 起動して最初に表示されるVB98フォルダ内のファイル名はコマンドボタン1・2どちらでも 変更できますが、ドライブやディレクトリを変更して、Textboxでリネームをしコマンドボタンを押すとエラーが出てリネームできません。 コマンド1ボタンエラー >Set fsofile = fso.GetFile(File1.FileName) コマンド2ボタンエラー >Name nname As newname となります。どちらもエラー番号53で"ファイルが見つかりません"とでます。 どのように記述すればディレクトリやドライブを変更しても名前を変えられるでしょうか?宜しくお願いします。 Private Sub Command1_Click()   Dim fso As New FileSystemObject   Set fsofile = fso.GetFile(File1.FileName)   fsofile.Name = Text1.Text   File1.Refresh End Sub Private Sub Command2_Click()   Dim nname As String   Dim newname As String   nname = File1.FileName   newname = Text1.Text   Name nname As newname   File1.Refresh End Sub Private Sub Dir1_Change()   File1.Path = Dir1.Path End Sub Private Sub Drive1_Change()   On Error GoTo Derr   Dir1.Path = Drive1.Drive   Exit Sub Derr:   If Derr = 68 Then     MsgBox "デバイスの準備ができていません。", vbCritical   Else     MsgBox "ドライブにエラーがあります。", vbCritical   End If End Sub Private Sub File1_Click()   Text1.Text = File1.FileName End Sub Private Sub Form_Load()   Text1.Text = ""   Dir1.Path = App.Path   Drive1.Drive = App.Path End Sub

  • Active Basic フォルダの絶対パスの取得

    ファイルまでの絶対パスの取得のように、自分のフォルダまでのパスを取得するにはどうしたらいいのでしょうか? D:\aaaa\bbbb\cccc\dddd\abcd.exe があって、 D:\aaaa\bbbb\cccc\dddd\ を取得したいのですが・・・ 実験してみたのですが、上手くいきませんでした。 すみませんが、やり方をご教授ください。お願いします。 ↓頑張った証 '自分自身のファイルパスを取得する Dim path[MAX_PATH] As Byte Dim FileName As BytePtr Dim MaxFilePath As Long Dim MyFileName As Long Dim AllByte As Long Dim MidAns As String GetModuleFileName(NULL,path,MAX_PATH) 'ファイルパスからファイル名を抜き出し、その大きさを取得して、引く FileName=malloc(Len(path)+1) GetFileTitle(path,FileName,Len(path)+1) MaxFilePath=Len(path) MyFileName=Len(FileName)+1 AllByte=MaxFilePath-MyFileName 'フォルダまでのパスを抜き出す MidAns=Mid$(path,1,54) free(FileName)

専門家に質問してみよう