1 问题
想写一个程序,调用另外一个命令,双击运行时直接后台运行,执行时不弹出console黑窗口。
2 解决方案
最开始使用system( "your_cmd" );
这样的方式,必然会有console窗口一闪而过。
后来查资料看到有人提出了添加链接器选项
#pragma comment(linker, "/SUBSYSTEM:windows /ENTRY:mainCRTStartup")
使得子系统和函数入口不匹配,就不会弹出黑色console窗口。
但是我的代码中默认调用了一个system函数,这句话实际是用cmd.exe执行一个命令行,
所以它还是会弹出黑窗。
接下来就需要用winapi来解决了,一般常规用法是CreateProcess
,但是我发现了一个
Deprecated的api更好用,WinExec
,原型是
#include <windows.h>
UINT WINAPI WinExec(
_In_ LPCSTR lpCmdLine,
_In_ UINT uCmdShow
);
Note This function is provided only for compatibility with 16-bit Windows. Applications should use the CreateProcess function.
竟然可以从16位兼容到现在,可以知道微软的兼容多么猛了。
所以只需要将system( "your_cmd" );
替换成WinExec( "cmd.exe /c your_cmd", SW_HIDE );