我正在使用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文件时将其删除(它将自行删除)。 这没有打开新窗口。
答案 0 :(得分:2)
由于系统根据其定义使用命令解释器创建新进程,因此您无法执行此操作。
来自MSDN主题system
系统函数将命令传递给命令解释器,该命令解释器 将字符串作为操作系统命令执行。
如果你想做“dir”,因为这是“cmd.exe”中的内置命令或你正在使用的任何命令解释器,很难“修复”这个问题 - 即使使用{{1} }或ShellExecute
不会帮助很多,因为你会得到一个窗口 - 它可能是最小化或类似的东西,但它仍然是一个窗口。
答案 1 :(得分:0)
使用CreateProcess
或ShellExecute
启动流程,您可以在那里传递与Windows相关的选项。通常可以在环境getenv("ComSpec")
答案 2 :(得分:0)
我找到了这个解决方案:
要在不打开窗口的情况下执行cmd命令,我创建一个bat文件(程序执行此操作)然后我使用此代码:
ShellExecute(NULL, "open", "Directory_Of_Bat_File", NULL, NULL, 0);
这将打开bat文件并执行命令。我还注意到你不需要system()来删除bat文件,但你可以通过编写来删除它:
del Directory_Of_Bat_File
在bat文件中,这将在你执行bat文件时将其删除(它将自行删除)。这没有打开新窗口。