C++ 如何在c+中执行shell程序并使其健壮+;无需弹出cmd窗口即可静默显示

C++ 如何在c+中执行shell程序并使其健壮+;无需弹出cmd窗口即可静默显示,c++,winapi,process,cmd,poco,C++,Winapi,Process,Cmd,Poco,例如,我使用创建进程win32函数来启动windows shell应用程序 Ipconfig并获取其输出,但没有弹出的cmd窗口。 我还尝试使用POCO库及其进程类,但每次都会弹出cmd 有谁知道如何使用POCO lib吗?在POCO论坛中没有大量的支持 您可以在没有窗口的情况下创建CMD进程,但需要为此设置正确的标志。当您创建进程时,还需要重定向输出 如果您需要了解ipconfig的内容,我建议您只需查看Win32 API的部分。您可以创建一个没有窗口的CMD进程,但在创建进程时需要为此设置正

例如,我使用创建进程win32函数来启动windows shell应用程序 Ipconfig并获取其输出,但没有弹出的cmd窗口。
我还尝试使用POCO库及其进程类,但每次都会弹出cmd


有谁知道如何使用POCO lib吗?在POCO论坛中没有大量的支持

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


如果您需要了解ipconfig的内容,我建议您只需查看Win32 API的部分。

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


如果您需要了解ipconfig的内容,我建议您只需查看Win32 API的链接。

要隐藏thw窗口,请在lpStartupInfo上调用CreateProcess时尝试传递SHU 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 /*...*/);

要隐藏thw窗口,请在lpStartupInfo上调用CreateProcess时尝试传递SHU 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 /*...*/);

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


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

至少在windows中,从命令提示符中运行的任何文件中提取标准输出时,都会出现一些星号。如果您曾经考虑过编写windows命令提示符的替代品,您就会知道。我知道获得精确输出的唯一方法是直接从命令提示符中获取字符。在开源项目控制台中有一个这样的例子


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

这实际上相当困难。没有控制台,Windows程序就没有stdin和stdout流。这实际上相当困难。如果没有控制台,Windows程序就没有stdin和stdout流。