Borland C++ Builder 用 DOS コマンド実行コンポーネント


概要

DOS コマンド実行用コンポーネントです。DOS コマンドをバックグラウンドで実行しながら、コマンドが標準出力に出力した文字列を利用することができます。何らかの処理を行う DOS コマンドがすでにあり、その標準出力をウィンドウに表示したい、などというときに使います。

イベント

このコンポーネントにはイベントが 7 つあります。

  1. OnOutputCharイベント

    DOS コマンドが標準出力あるいは標準エラー出力デバイスに 1 文字出力するたびに呼ばれます。イベントハンドラのプロトタイプは

    void __fastcall TForm1::DosCommand1OutputChar( TObject* Sender, char Ch );

    のような感じになります。

  2. OnOutputLineイベント

    DOS コマンドが標準出力あるいは標準エラー出力デバイスに文字列を一行出力するたびに呼ばれます。イベントハンドラのプロトタイプは

    void __fastcall TForm1::DosCommand1OutputLine( TObject* Sender, const AnsiString& Str );

    のような感じになります。

  3. OnStdOutCharイベント

    DOS コマンドが標準出力デバイスに 1 文字出力するたびに呼ばれます。イベントハンドラのプロトタイプは

    void __fastcall TForm1::DosCommand1StdOutChar( TObject* Sender, char Ch );

    のような感じになります。

  4. OnStdOutLineイベント

    DOS コマンドが標準出力デバイスに文字列を一行出力するたびに呼ばれます。イベントハンドラのプロトタイプは

    void __fastcall TForm1::DosCommand1StdOutLine( TObject* Sender, const AnsiString& Str );

    のような感じになります。

  5. OnStdErrCharイベント

    DOS コマンドが標準エラー出力デバイスに 1 文字出力するたびに呼ばれます。イベントハンドラのプロトタイプは

    void __fastcall TForm1::DosCommand1StdErrChar( TObject* Sender, char Ch );

    のような感じになります。

  6. OnStdErrLineイベント

    DOS コマンドが標準エラー出力デバイスに文字列を一行出力するたびに呼ばれます。イベントハンドラのプロトタイプは

    void __fastcall TForm1::DosCommand1StdErrLine( TObject* Sender, const AnsiString& Str );

    のような感じになります。

  7. OnTerminateイベント

    DOS コマンドの実行が終わると呼ばれます。イベントハンドラのプロトタイプは

    void __fastcall TForm1::DosCommand1Terminate( TObject* Sender );

    のような感じになります。

プロパティ

このコンポーネントにはプロパティが三つあります。

  1. bool IsOnExecutionプロパティ

    DOS コマンドが実行中のときにはtrue, そうでないときにはfalseを返すプロパティです。読み出し専用プロパティです。

  2. DWORD ExitCodeプロパティ

    実行したコマンドの終了コードです。ただし、コマンド実行が終了していないと意味を持ちません。読み出し専用プロパティです。

  3. TDosCommandPriorityType Priorityプロパティ

    実行する DOS コマンドプロセスのスレッドの実行プライオリティを指定します。

パブリックメンバ

このコンポーネントにはTComponentから継承されたものの他にパブリックメンバ関数が三つあります。

  1. bool Execute( const AnsiString& command, const AnsiString& dir = "" );

    command引数で与えられたコマンドをdir引数で与えられたディレクトリで実行します。コマンド実行後、すぐに戻ります。返値がtrueの場合は実行成功、falseの場合は実行失敗を表わします。このコンポーネントは一回に一つのコマンドしか実行できませんので、すでにコマンドが実行中の場合はfalseを返します。同時に二つ以上のコマンドを実行させたい場合にはその数だけTDosCommandコンポーネントのインスタンスが必要となります。

  2. void WaitForTermination();

    コマンドが終了するまで待ちます。

  3. void Terminate();

    コマンドを強制終了させます。

使用上の注意

PriorityプロパティのデフォルトはdcpNormalですが、この場合実行速度が非常に遅い場合があります。そのようなときにはPrioritydcpHighを指定してください。ただし、あまりいい解決方法ではありません。遅くなる原因は、DOS コマンドからの標準出力をパイプ経由で読み込むスレッドの中で PeakNamedPipe API と GetExitCodeProcess API 呼び出しをループでまわしている部分であると思われるのですが、私にはこれ以外の方法はわかりませんでした。何かスマートな解決方法をご存知の方は教えてください。

免責事項

このコンポーネントの配布・改変・利用は完全に自由です。連絡などは一切無用です。ただし、本コンポーネントの不具合による損害の責任は負いません。

謝辞

このコンポーネントの作成にあたり、同志社大学工学部知識工学科の川崎高志さん、east_d さんにアドバイスをいただきました。また、C++Builder MLの皆様にも感謝いたします。

変更履歴

連絡

ご意見、ご希望、ご感想、バグレポート等がございましたら、

nospherus@geocities.co.jp

までお願いします。

ダウンロード

Borland C++ Builder 用 DOS コマンド実行コンポーネントTDosCmd.zipをダウンロードするには、ここを押してください。


Last Modified: Sep 1 1999 by Nospherus