-4

私はこれを持っています

static std::string exec(char* cmd) {
            FILE* pipe = _popen(cmd, "r");
            if (!pipe) return "ERROR -22";
            char buffer[128];
            std::string result = "";
            while(!feof(pipe)) {
                if(fgets(buffer, 128, pipe) != NULL)
                        result += buffer;
            }
            _pclose(pipe);
            return result;

}

しかし、私が抱えている問題は、昼食をとるプログラムを非表示にしたいということです。どうすればそれを行うことができますか? どうも

4

1 に答える 1

2

Hans Passant がコメントで述べたように、ウィンドウ作成プロセスを制御できないため、CreateProcess代わりに を使用して子プロセスを生成する必要があります。_popen_popen

コンソール ウィンドウを非表示にするCREATE_NO_WINDOWには、パラメーターにプロセス作成フラグを使用しdwCreationFlagsます。

プロセスの出力をキャプチャするには、標準出力ストリーム用のパイプを で作成する必要がありますCreatePipe。渡した構造体のhStdOutputメンバーにそのパイプ ハンドルを割り当て、スタートアップ情報にフラグを設定して、そのメンバーが有効であることを確認します。次に、データを読み取るには、パイプ ハンドルで使用するだけです。STARTUPINFOSTARTF_USESTDHANDLESdwFlagsReadFile

Hans は、子プロセスを使用してパイプを作成する良い例へのリンクも提供しています。ただし、この例は必要以上のことを行っています。3 つのストリームすべて (stdin、stdout、および stderr) のパイプを作成していますが、必要なのはstdout をキャプチャします。

于 2012-05-01T05:14:15.307 に答える