如何在没有popup cmd窗口的情况下静默地执行shell程序并在c ++中获取它的粗壮

时间:2011-05-24 08:34:47

标签: c++ winapi process cmd poco

我正在使用create process win32函数来启动Windows shell应用程序 Ipconfig并获取其输出,但没有弹出cmd窗口 我也尝试使用POCO库及其进程类,但每次使用cmd弹出窗口。

是否有任何机构知道如何使用POCO lib在POCO论坛中提供支持?

3 个答案:

答案 0 :(得分:3)

您可以在没有窗口的情况下创建CMD流程,但是在创建流程时需要为此设置正确的标记,您还需要重定向输出。

如果您需要获取ipconfig的内容,我建议您直接浏览Win32 API的IP Helper functions

答案 1 :(得分:3)

要隐藏窗口,请在lpStartupInfo上调用CreateProcess时尝试传递SH_HIDE。

STARTUPINFO si = {0};
si.cb = sizeof(si);
si.dwFlags = STARTF_USESHOWWINDOW;
si.wShowWindow = SW_HIDE;    
CreateProcess(/*...*/, &si /*...*/);

如果要收集结果,可以调用CreateFile来获取文件句柄,并在STARTUPINFO结构中传递句柄,然后在CreateProcess返回时读取它:

STARTUPINFO si = {0};
si.cb = sizeof(si);
si.hStdOutput = hOutput;
si.hStdError = (HANDLE) STD_ERROR_HANDLE;
si.hStdInput = (HANDLE) STD_INPUT_HANDLE;
si.dwFlags = STARTF_USESHOWWINDOW|STARTF_USESTDHANDLES;
si.wShowWindow = SW_HIDE;
CreateProcess(/*...*/, &si /*...*/);

答案 2 :(得分:1)

至少在Windows中,有一些星号可以从命令提示符中运行的任何内容中提取标准输出。如果您曾经考虑过编写Windows命令提示符的替代品,那么您应该知道。我知道获得精确输出的唯一方法是直接从命令提示符中获取字符。在开源项目控制台http://sourceforge.net/projects/console/

中有一个这样的例子

在某些情况下,将标准输出的文件句柄更改为可以读取的内容将会起作用。