DelphiでTJvCreateProcessを使って、コマンドプロンプトウィンドウを非表示にしてコマンドラインを実行する

Delphi XE5でJCLのTJvCreateProcessを使って、コマンドプロンプトウィンドウを非表示にしてコマンドラインを実行し、実行結果を取得する方法を紹介します。

コマンドラインを実行する

フォームにTButtonとTJvCreateProcessを配置します。

001

ボタンのOnClickイベントを記述します。

procedure TForm1.Button1Click(Sender: TObject);
begin
  // 実行するプログラムのファイル名
  JvCreateProcess1.CommandLine := 'ipconfig';

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

アプリケーションを実行して、ボタンを押します。

コマンドプロンプトウィンドウにipconfigの実行結果が表示され、すぐにコマンドプロンプトウィンドウが閉じます。

実行結果を取得する

TJvCreateProcessのConsoleOptionsプロパティにcoRedirectを加えると、コンソールプロセスへの出力をOnReadイベントで受け取ることができます。

// コンソールプロセスへの出力をOnReadイベントで受け取る
JvCreateProcess1.ConsoleOptions := [coOwnerData, coRedirect];

フォームにTMemoコンポーネントを配置します。

002

ボタンのOnClickイベントを修正します。

procedure TForm1.Button1Click(Sender: TObject);
begin
  // 実行するバッチファイルのファイル名
  JvCreateProcess1.CommandLine := 'ipconfig';

  // コンソールプロセスへの出力をOnReadイベントで受け取る
  JvCreateProcess1.ConsoleOptions := [coOwnerData, coRedirect];

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

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

procedure TForm1.JvCreateProcess1Read(Sender: TObject; const S: string;
  const StartsOnNewLine: Boolean);
begin
  Memo1.Lines.Add(S)
end;

アプリケーションを実行して、ボタンを押します。

コマンドプロンプトウィンドウがすぐに閉じ、実行結果がMemo1に表示されます。

003

コマンドプロンプトウィンドウを非表示にする

コマンドプロンプトウィンドウが表示されないように変更します。

JvCreateProcess1のStartupInfoプロパティの次の値を変更します。
StartupInfoプロパティはSTARTUPINFO構造体の値を表します。

JvCreateProcess1.StartupInfo.ShowWindow := swHide;
JvCreateProcess1.StartupInfo.DefaultWindowState := False;

ボタンのOnClickイベントを修正します。

procedure TForm1.Button1Click(Sender: TObject);
begin
  // 実行するバッチファイルのファイル名
  JvCreateProcess1.CommandLine := 'ipconfig';

  // コンソールプロセスへの出力をOnReadイベントで受け取る
  JvCreateProcess1.ConsoleOptions := [coOwnerData, coRedirect];

  // コマンドプロンプトウィンドウを表示しない
  JvCreateProcess1.StartupInfo.ShowWindow := swHide;
  JvCreateProcess1.StartupInfo.DefaultWindowState := False;

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

アプリケーションを実行して、ボタンを押します。

コマンドプロンプトウィンドウが表示されず、Memo1に実行結果が表示されます。

関連するエントリー

DOSコマンドを実行する方法は、こちらのページをご覧ください。

TJvCreateProcessのプロパティやメソッドについては、こちらのページをご覧ください。

コメントを残す

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

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