首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何在不弹出命令窗口情况下静默地在c++中执行外壳程序并获取其状态

如何在不弹出命令窗口情况下静默地在c++中执行外壳程序并获取其状态
EN

Stack Overflow用户
提问于 2011-05-24 16:34:47
回答 3查看 2K关注 0票数 1

我正在使用创建进程win32函数来启动windows shell应用程序,例如Ipconfig,并获得其输出,但没有弹出命令窗口。

我也尝试了POCO库和它的进程类,但每次cmd弹出。

有没有人知道如何使用POCO库来做这件事在POCO论坛中没有mush支持?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-05-24 18:08:03

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

代码语言:javascript
代码运行次数:0
运行
复制
STARTUPINFO si = {0};
si.cb = sizeof(si);
si.dwFlags = STARTF_USESHOWWINDOW;
si.wShowWindow = SW_HIDE;    
CreateProcess(/*...*/, &si /*...*/);

如果您想收集结果,可以调用CreateFile获取一个文件句柄,在STARTUPINFO结构中传入该句柄,在CreateProcess返回时读取:

代码语言:javascript
代码运行次数:0
运行
复制
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 /*...*/);
票数 3
EN

Stack Overflow用户

发布于 2011-05-24 16:39:52

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

如果您需要了解ipconfig的内容,我建议您只使用Win32应用程序接口的IP Helper functions

票数 3
EN

Stack Overflow用户

发布于 2011-05-24 18:51:49

至少在windows中,从命令提示符中运行的任何内容中提取标准输出都有一些星号。如果你曾经考虑过编写windows命令提示符的替代品,你就会知道。据我所知,获得精确输出的唯一方法是直接从命令提示符中抓取字符。在开源项目控制台http://sourceforge.net/projects/console/中有一个这样的示例

但是,在某些情况下,将标准输出的文件句柄更改为您可以从中读取的内容是可行的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6107738

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档