Delphi XE5でJCLのTJvCreateProcessを使って、コマンドプロンプトウィンドウを非表示にしてコマンドラインを実行し、実行結果を取得する方法を紹介します。
コマンドラインを実行する
フォームにTButtonとTJvCreateProcessを配置します。
ボタンのOnClickイベントを記述します。
procedure TForm1.Button1Click(Sender: TObject);
begin
// 実行するプログラムのファイル名
JvCreateProcess1.CommandLine := 'ipconfig';
// バッチファイルを実行する
JvCreateProcess1.Run;
end;
アプリケーションを実行して、ボタンを押します。
コマンドプロンプトウィンドウにipconfigの実行結果が表示され、すぐにコマンドプロンプトウィンドウが閉じます。
実行結果を取得する
TJvCreateProcessのConsoleOptionsプロパティにcoRedirectを加えると、コンソールプロセスへの出力をOnReadイベントで受け取ることができます。
// コンソールプロセスへの出力をOnReadイベントで受け取る
JvCreateProcess1.ConsoleOptions := [coOwnerData, coRedirect];
フォームにTMemoコンポーネントを配置します。
ボタンの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に表示されます。
コマンドプロンプトウィンドウを非表示にする
コマンドプロンプトウィンドウが表示されないように変更します。
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のプロパティやメソッドについては、こちらのページをご覧ください。