-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的结构的成员STARTUPINFO,并确保STARTF_USESTDHANDLES在启动信息中设置标志,dwFlags以便它知道该成员是有效的。然后,要读取数据,您只需ReadFile在管道句柄上使用。

Hans 还提供了一个使用子进程创建管道的好示例的链接尽管该示例比您需要做的更多——它为所有三个流(stdin、stdout 和 stderr)创建管道,而您只需要捕获标准输出。

于 2012-05-01T05:14:15.307 回答