2

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

4

3 回答 3

2

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

来自 MSDN 主题system

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

如果你想做“dir”,因为这是“cmd.exe”或你正在使用的任何命令解释器中的内置命令,所以很难“修复”这个问题——即使使用ShellExecuteorCreateProcess也不会有很大帮助,因为无论哪种方式你都会得到一个窗口 - 它可能是最小化或类似的东西,但它仍然是一个窗口。

于 2013-06-30T19:10:56.487 回答
0

使用CreateProcessShellExecute启动进程,您可以在其中传递与窗口相关的选项。system() 执行的内容通常可以在环境中找到,getenv("ComSpec")

于 2013-06-30T19:06:17.077 回答
0

我找到了这个解决方案:

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

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

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

del Directory_Of_Bat_File

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

于 2013-07-03T20:49:13.270 回答