system()没有提示,c ++,winmain

时间:2013-06-30 19:01:09

标签: c++ system winmain

我正在使用c ++,我有一个与winmain一起使用的程序。 我不希望system()调用打开和关闭窗口。

示例:

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
{
    system("dir > nul 2> nul");

    return 0;
}

我想使用系统调用,但我不希望它们打开一个新窗口。

提前致谢。

修改

我找到了这个解决方案:

要在不打开窗口的情况下执行cmd命令,我创建一个bat文件(程序执行此操作)然后我使用此代码:

ShellExecute(NULL, "open", "Directory_Of_Bat_File", NULL, NULL, 0);

这将打开bat文件并执行命令。 我还注意到你不需要system()来删除bat文件,但你可以通过编写来删除它:

del Directory_Of_Bat_File

在bat文件中,这将在你执行bat文件时将其删除(它将自行删除)。 这没有打开新窗口。

3 个答案:

答案 0 :(得分:2)

由于系统根据其定义使用命令解释器创建新进程,因此您无法执行此操作。

来自MSDN主题system

  

系统函数将命令传递给命令解释器,该命令解释器   将字符串作为操作系统命令执行。

如果你想做“dir”,因为这是“cmd.exe”中的内置命令或你正在使用的任何命令解释器,很难“修复”这个问题 - 即使使用{{1} }或ShellExecute不会帮助很多,因为你会得到一个窗口 - 它可能是最小化或类似的东西,但它仍然是一个窗口。

答案 1 :(得分:0)

使用CreateProcessShellExecute启动流程,您可以在那里传递与Windows相关的选项。通常可以在环境getenv("ComSpec")

中找到system()执行的内容

答案 2 :(得分:0)

我找到了这个解决方案:

要在不打开窗口的情况下执行cmd命令,我创建一个bat文件(程序执行此操作)然后我使用此代码:

ShellExecute(NULL, "open", "Directory_Of_Bat_File", NULL, NULL, 0);

这将打开bat文件并执行命令。我还注意到你不需要system()来删除bat文件,但你可以通过编写来删除它:

del Directory_Of_Bat_File

在bat文件中,这将在你执行bat文件时将其删除(它将自行删除)。这没有打开新窗口。