我有这个
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
答案 0 :(得分:2)
正如Hans Passant在评论中提到的那样,您必须使用CreateProcess
来生成子进程而不是_popen
,因为_popen
无法控制窗口创建过程
要隐藏控制台窗口,请使用dwCreationFlags
参数的CREATE_NO_WINDOW
进程创建标记。
为了捕获进程的输出,您需要使用CreatePipe
为其标准输出流创建管道。将该管道句柄分配给您传入的hStdOutput
结构的STARTUPINFO
成员,并确保在启动信息的STARTF_USESTDHANDLES
中设置dwFlags
标志,以便它知道会员有效。然后,要读取数据,只需在管道句柄上使用ReadFile
。
Hans还提供了一个使用子进程here创建管道的好例子的链接,尽管这个示例比您需要做的更多 - 它为所有三个流创建管道(stdin,stdout和stderr),而你只需要捕获标准输出。