『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などを作成して表示させる)という方法にしたいのですけれど…
No.1ベストアンサー
- 回答日時:
1.Execを使う方法
結構面倒くさい
http://msdn.microsoft.com/ja-jp/library/cc364375 …
2.Processクラスでコマンドプロンプトをしっかり制御する
.netなら普通はこっち
http://www.atmarkit.co.jp/fdotnet/dotnettips/657 …
この回答への補足
ありがとうございます
デバッグ用に、ネット検索でヒットしました記述を少し変更しまして
以下のような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が見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) Excelにて、フォルダ内のTextファイルをマクロで統合すると文字化けしてしまう時の解消コード 4 2023/01/01 07:32
- Excel(エクセル) Excel VBAどこが間違ってますか? 4 2023/07/17 10:04
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
- Visual Basic(VBA) 貼り付けた値が消えていく 以下はソースファイルの2番目のシートのB6から最終行を取得 ターゲットファ 2 2023/07/27 12:23
- Visual Basic(VBA) 【前回の続き続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/24 20:49
- Excel(エクセル) エクセルのマクロについて教えてください。 2 2023/02/20 14:46
- Excel(エクセル) エクセルのマクロについて教えてください。 2 2023/02/21 13:29
- Excel(エクセル) エクセル VBA For Next 繰り返しの書き方を教えてください 6 2022/09/01 14:11
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2023/02/21 11:19
- Visual Basic(VBA) 【前回の続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/16 16:44
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
もしかして
-
エクセルで、日付を入力すると...
-
「ご処理進めて頂きますようお...
-
VBAでループ内で使う変数名を可...
-
VBAでセルに値が入力されるまで...
-
【Excel】特定の文字を含むセル...
-
自分の不注意で仕事で乗り合い...
-
メルカリのメルカードで買い物...
-
リョウ・・・量?料?
-
VBA SaveChanges 上書きされない
-
switch の範囲指定
-
VBAでGetAsynckeyStatekのエラー
-
全てのフォルダから最新ファイ...
-
インタラクティブの反対語は?
-
VBAのオートフィルについて
-
セックスレスの既婚女性は自慰...
-
DoEventsがやはり分からない
-
計算の問題なのですが、 例えば...
-
findは動くがfindnextがマクロ...
-
お家デートをしててハグを長い...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「ご処理進めて頂きますようお...
-
メルカリのメルカードで買い物...
-
エクセルで、日付を入力すると...
-
VBAでループ内で使う変数名を可...
-
【Excel】特定の文字を含むセル...
-
EXCEL VBA マクロ 実行する度に...
-
switch の範囲指定
-
DoEventsがやはり分からない
-
VBの質問#if 0 then ってどう...
-
UMLでの例外処理
-
Do~Loopした回数をカウントしたい
-
VB.NET Excelを読み込んでDataT...
-
月度は何て読みますか?
-
findは動くがfindnextがマクロ...
-
リョウ・・・量?料?
-
iD
-
VBA SaveChanges 上書きされない
-
Select Case文でこのようなこと...
-
Loadイベント中にほかのイベン...
-
セルの値が0はクリアするマクロ
おすすめ情報