TJvCreateProcessを使ってみた

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イベントが発生します。

コメントを残す

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

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