JCLのTJvCreateProcessを使うと、バッチファイルを実行して、そのバッチファイルが出力した内容を取得することができます。
フォームにボタン(TButton)、リストボックス(TListBox)、TOpenDialog、TJvCreateProcessを配置します。
ボタンを押したときのイベントを記述します。
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を使えば、これだけのコードで実現できました。