TJvCreateProcessを使ってみた。
※TJvCreateProcessはJVCLのコンポーネントです。JVCLをインストールすると使用できるようになります。
■メモ帳を実行するサンプルプログラム
メモ帳を起動します。
void __fastcall TForm1::Button1Click(TObject *Sender)
{
//メモ帳を起動する
JvCreateProcess1->CommandLine = "notepad.exe";
JvCreateProcess1->WaitForTerminate = true;
JvCreateProcess1->Run();
Memo1->Lines->Add("Run");
}
void __fastcall TForm1::JvCreateProcess1Terminate(TObject *Sender, DWORD ExitCode)
{
//メモ帳が終了した
Memo1->Lines->Add("Exit");
}
- CommandLineプロパティ
実行するコマンドラインを指定します。
-
WaitForTerminateプロパティ
trueのときはプロセスの終了を待ちます。
終了を待っている間はStateプロパティはpsWaitingになり、プロセスが終了するとStateプロパティはpsReadyになります。
プロセスが終了すると、OnTerminateイベントが発生します。falseのときはプロセスの終了を待ちません。
StateプロパティはpsRunningになります。 -
Runメソッド
新しいプロセスを作成します。
■ipconfigコマンドの実行結果を取得するサンプルプログラム
ipconfigコマンドを実行し、結果をメモコンポーネントに出力します。
void __fastcall TForm1::Button1Click(TObject *Sender)
{
JvCreateProcess1->CommandLine = "ipconfig";
JvCreateProcess1->ConsoleOptions << coRedirect;
JvCreateProcess1->WaitForTerminate = true;
JvCreateProcess1->Run();
}
void __fastcall TForm1::JvCreateProcess1Read(TObject *Sender, const UnicodeString S,
const bool StartsOnNewLine)
{
Memo1->Lines->Add(S);
}
- ConsoleOptionsプロパティ
コンソールプロセスを作成する時に、プロセスの標準入出力を向け直すことができます。
出力があるとOnRowReadイベントやOnReadイベントが発生します。
■コマンドプロンプトのdirコマンドを実行結果を取得するサンプルプログラム
cmd.exeを実行してdirコマンドを実行します。
実行結果をメモコンポーネントに出力します。
void __fastcall TForm1::Button1Click(TObject *Sender)
{
JvCreateProcess1->CommandLine = "cmd";
JvCreateProcess1->ConsoleOptions << coRedirect;
JvCreateProcess1->WaitForTerminate = false;
JvCreateProcess1->Run();
JvCreateProcess1->WriteLn("dir C:\\");
JvCreateProcess1->WriteLn("exit");
}
void __fastcall TForm1::JvCreateProcess1Read(TObject *Sender, const UnicodeString S,
const bool StartsOnNewLine)
{
Memo1->Lines->Add(S);
}
- WriteLnメソッド
ConsoleOptionsプロパティで標準入出力を変更した時、WriteメソッドやWriteLnメソッドでデータを送ることができます。
■コマンドプロンプトを表示しないサンプルプログラム
ipconfigコマンドを実行するときコマンドプロンプトを表示しないようにします。
ウィンドウの状態を指定するにはStartupInfoを使用します。
StartupInfoはSTARTUPINFOのラッパーです。
TJvCPSStartupInfoのDefaultWindowStateがtrueのときは、ShowWindowプロパティの値は無視されます。
ShowWindowプロパティの値を使用するには、DefaultWindowStateの値をfalseにします。
void __fastcall TForm1::Button1Click(TObject *Sender)
{
JvCreateProcess1->CommandLine = "ipconfig";
JvCreateProcess1->ConsoleOptions << coRedirect;
JvCreateProcess1->WaitForTerminate = true;
JvCreateProcess1->StartupInfo->DefaultWindowState = false;
JvCreateProcess1->StartupInfo->ShowWindow = swHide;
JvCreateProcess1->Run();
}
void __fastcall TForm1::JvCreateProcess1Read(TObject *Sender, const UnicodeString S,
const bool StartsOnNewLine)
{
Memo1->Lines->Add(S);
}
- ConsoleOptionsプロパティ
コンソールプロセスを作成する時に、プロセスの標準入出力を向け直すことができます。
出力があるとOnRowReadイベントやOnReadイベントが発生します。