当我运行exe时,如何隐藏窗口

时间:2012-05-01 04:50:42

标签: c++ winapi pipe

我有这个

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;

}

但我遇到的问题是我想要隐藏午餐程序我该怎么做? THX

1 个答案:

答案 0 :(得分:2)

正如Hans Passant在评论中提到的那样,您必须使用CreateProcess来生成子进程而不是_popen,因为_popen无法控制窗口创建过程

要隐藏控制台窗口,请使用dwCreationFlags参数的CREATE_NO_WINDOW进程创建标记。

为了捕获进程的输出,您需要使用CreatePipe为其标准输出流创建管道。将该管道句柄分配给您传入的hStdOutput结构的STARTUPINFO成员,并确保在启动信息的STARTF_USESTDHANDLES中设置dwFlags标志,以便它知道会员有效。然后,要读取数据,只需在管道句柄上使用ReadFile

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