JCLのTJvCreateProcessを使ってバッチファイルの出力を取得する

JCLのTJvCreateProcessを使うと、バッチファイルを実行して、そのバッチファイルが出力した内容を取得することができます。

フォームにボタン(TButton)、リストボックス(TListBox)、TOpenDialog、TJvCreateProcessを配置します。

01

ボタンを押したときのイベントを記述します。

procedure TForm1.Button1Click(Sender: TObject);
begin
  if not OpenDialog1.Execute() then Exit;

  //実行するバッチファイルのファイル名
  JvCreateProcess1.CommandLine := OpenDialog1.FileName;

  //バッチファイルの出力をOnReadイベントで受け取る
  JvCreateProcess1.ConsoleOptions := JvCreateProcess1.ConsoleOptions + [coRedirect];

  //コンソール画面を表示しない
  JvCreateProcess1.StartupInfo.ShowWindow := swHide;
  JvCreateProcess1.StartupInfo.DefaultWindowState := False;

  //バッチファイルを実行する
  JvCreateProcess1.Run;
end;

これだけでバッチファイルを実行して、出力内容を取得できます。

バッチファイルの出力内容をリストボックスに表示します。

TJvCreateProcessのOnReadイベントを記述します。

procedure TForm1.JvCreateProcess1Read(Sender: TObject; const S: string;
  const StartsOnNewLine: Boolean);
begin
  if StartsOnNewLine then
    ListBox1.Items.Add(S)
  else
    ListBox1.Items[ListBox1.Count - 1] := S
end;

引数Sはコンソールから受け取ったデータです。
引数StartsOnNewLineは、受け取ったSが新しい行の始まりかどうかを示します。

TJvCreateProcessを使えば、これだけのコードで実現できました。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください