【问题标题】:system() without prompt, c++, winmainsystem() 无提示,c++,winmain
【发布时间】:2013-06-30 19:01:08
【问题描述】:

我正在使用 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 文件时会删除它(它会自行删除)。 这无需打开新窗口。

【问题讨论】:

  • 如果您有解决方案,请将其作为答案发布,而不是将其编辑到您的问题中。 (是的,您可以回答自己的问题;如果它是您问题的最佳解决方案,您甚至可以接受自己的答案。)

标签: c++ system winmain


【解决方案1】:

由于系统,根据它的定义,使用命令解释器创建一个新进程,你不能这样做。

来自 MSDN 主题system

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

如果您想执行“dir”,因为这是“cmd.exe”或您正在使用的任何命令解释器中的内置命令,因此很难“修复”这个问题 - 即使使用 ShellExecuteCreateProcess 无济于事,因为无论哪种方式你都会得到一个窗口——它可能是最小化或类似的东西,但它仍然是一个窗口。

【讨论】:

  • 有没有其他方法可以在不打开新窗口的情况下使用del等cmd命令?
【解决方案2】:

使用CreateProcessShellExecute 启动进程,在那里你可以传递与windows 相关的选项。 system() 执行的内容一般可以在环境中找到,getenv("ComSpec")

【讨论】:

    【解决方案3】:

    我找到了这个解决方案:

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

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

    这将打开 bat 文件并执行命令。我还注意到您不需要 system() 来删除 bat 文件,但您可以通过以下方式将其删除:

    del Directory_Of_Bat_File
    

    在 bat 文件中,执行 bat 文件时会删除它(它会自行删除)。这无需打开新窗口。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-09-13
      • 1970-01-01
      • 2012-05-06
      • 2012-12-02
      • 2010-09-29
      • 1970-01-01
      • 2016-08-29
      相关资源
      最近更新 更多