通过 C++ 运行命令时隐藏控制台窗口

Posted

技术标签:

【中文标题】通过 C++ 运行命令时隐藏控制台窗口【英文标题】:Hide console window while running a command through c++ 【发布时间】:2013-09-17 05:34:30 【问题描述】:

我使用 CreateProcess 运行命令并使用 CREATE_NO_WINDOW 标志,但控制台弹出一小部分时间,如何避免它?

STARTUPINFO si;
PROCESS_INFORMATION pi;

ZeroMemory( &si, sizeof(si) );
si.cb = sizeof(si);
ZeroMemory( &pi, sizeof(pi) );

CreateProcess
( 
NULL,                // No module name (use command line)
command,             //set env variable and use it is my command
NULL,                // Process handle not inheritable
NULL,                // Thread handle not inheritable
FALSE,               // Set handle inheritance to FALSE
CREATE_NO_WINDOW,    //don't create window but it appears for fraction of second!
NULL,                // Use parent's environment block
NULL,                // Use parent's starting directory
&si,                 // Pointer to STARTUPINFO structure
&pi                  // Pointer to PROCESS_INFORMATION structure
)  

提前感谢您的帮助。

【问题讨论】:

也许这就是你要找的。 ***.com/questions/4743559/… 【参考方案1】:

你必须重定向你的输出。有一个成员 hStdOutputhStdError 应该被重定向。 Here on MSDN 就是一个例子。

【讨论】:

想不通!能告诉我具体怎么做吗? 请看那个例子。他们在那里准确地显示了您正在寻找的东西。基本上,您必须为hStdOutput 和/或hStdError 指定另一个设备句柄。这可以是将所有内容重定向到文件的文件句柄,也可以是示例中的管道句柄。也可以打开NUL设备CreateFile("nul"...)丢弃输出。【参考方案2】:

在您的STARTUPINFO 结构中,在dwFlags 成员中设置STARTF_USESHOWWINDOW 标志,并将wShowWindow 设置为SW_HIDE

【讨论】:

嗯,它还是来了!有什么想法吗?

以上是关于通过 C++ 运行命令时隐藏控制台窗口的主要内容,如果未能解决你的问题,请参考以下文章

c# .NEt 3.5 以用户形式运行进程时无法隐藏 CMD 窗口 - 窗体应用程序

如何在 macOS 上通过命令隐藏终端窗口

Win7 运行bat批处理文件时怎么隐藏cmd命令提示符窗口

如何用批处理运行某个程序时不显示命令提示符窗口

易语言隐藏bat窗口

C++中如何同时运行俩个dos命令?