我用C使用system
命令++调用一些外部程序,每当我使用它,控制台窗口将打开,命令结束后关闭时剿控制台。调用C“系统” ++
如何避免打开控制台窗口?如果解决方案可能与平台无关,我会很高兴。我还想让我的程序等到命令完成。
我用C使用system
命令++调用一些外部程序,每当我使用它,控制台窗口将打开,命令结束后关闭时剿控制台。调用C“系统” ++
如何避免打开控制台窗口?如果解决方案可能与平台无关,我会很高兴。我还想让我的程序等到命令完成。
这听起来像你正在使用Windows。
在Linux(和通常的* nix)上,我将分别替换system
的呼叫和fork
和exec
。在Windows上,我认为在Windows API —中有一些spawn-a-new-process函数请参考文档。
当你运行shell命令和/或外部程序,你的程序是很难做平台无关的,因为这将取决于具有命令和/或你正在运行外部程序的平台。
一般来说,你是正确的程序是平台依赖当使用shell命令时。但是,在这种情况下,我确保外部程序安装在我正在使用的机器上。这不是一个简单的shell命令。关于你的答案 - 可以在Windows中使用CreateProcess,在Unix中使用fork + exec,但我希望能够更优雅地解决这个问题。 – Dana 2009-11-26 09:22:00
有关CreateProcess/fork + exec的优雅之处?如果你把它包装在一个不错的课堂上,你有一个非常优雅的方式来启动流程,再加上你可以轻松添加诸如重定向输出/输入等选项。 – stijn 2009-11-26 10:39:34
EXEC()看起来相当独立的平台,因为它是POSIX。在Windows中,这是_exec(),而它的exec()在UNIX上:见http://msdn.microsoft.com/en-us/library/431x4c1w(VS.71).aspx
ERRM。 CreateProcess
或ShellExecute
。
这可能是最简单的,也许是最好的方式,这也将让这个运行此命令,而你的程序也不会冻结。 起初不要忘记使用Windows头文件;
#include <Windows.h>
然后您需要使用以下函数来运行您的命令;
WinExec("your command", SW_HIDE);
注意; WinExec
方法已被弃用了十多年。它今天仍然正常工作。如果不需要,您不应该使用此方法。
...而不是你的方式不要想用;
system("your command");
我几乎没有将WinExec称为“最佳”方式,因为它已被弃用超过17年。 – 2012-03-13 14:58:58
好吧,我不确定这是为什么我说也许 – 2012-03-13 15:04:13
工作对我来说很好,即使不赞成,因为我正在寻找几个小时,所以我不得不高调起来。谢谢 – Demurgos 2014-02-01 09:57:35
这里有一个方法来执行没有新的cmd.exe
窗口的命令。基于Roland Rabien's answer和MSDN,我写了一个工作职能:
int windows_system(const char *cmd)
{
PROCESS_INFORMATION p_info;
STARTUPINFO s_info;
LPSTR cmdline, programpath;
memset(&s_info, 0, sizeof(s_info));
memset(&p_info, 0, sizeof(p_info));
s_info.cb = sizeof(s_info);
cmdline = _tcsdup(TEXT(cmd));
programpath = _tcsdup(TEXT(cmd));
if (CreateProcess(programpath, cmdline, NULL, NULL, 0, 0, NULL, NULL, &s_info, &p_info))
{
WaitForSingleObject(p_info.hProcess, INFINITE);
CloseHandle(p_info.hProcess);
CloseHandle(p_info.hThread);
}
}
适用于所有Windows平台。打电话就像你会system()
。
重复更好的答案(对于Windows):http://stackoverflow.com/questions/1597289/hide-console-in-c-system-function-win – Steed 2014-07-04 07:42:49