MFC调用CMD命令时,可不可以不弹出控制台黑框

MFC调用CMD命令时,能否不弹出控制台黑框?
程序中调用了形如   system("xcopy .....");  这样的,而且是多处调用
所以存在的问题是,控制台黑框会不断的弹出来,而且每次弹出的窗口位置还不同,导致做其他工作的焦点会被它抢掉,比如正在VS编辑代码,黑框出来之后VS就失去焦点了,影响其他的工作。有时这个程序的运行时间好几个小时,做其他事情的效率就大大降低

问诸位大侠有没有办法让他不弹出,或者其他解决方法?前提是用system的代码部分不修改
------解决方案--------------------
参考这个
http://blog.csdn.net/wallaceli1981/article/details/6655287
------解决方案--------------------
应该是不行吧 cmd的那些命令不是通过启动参数可以执行的
------解决方案--------------------
可以,有方法能让那个黑窗口不闪的
------解决方案--------------------
如果你非要执行system命令 并且不想让cmd出窗口 估计得写个hook了 专门勾cmd的窗口创建 然后处理
------解决方案--------------------
BOOL WINAPI CreateProcess(
  __in_opt     LPCTSTR lpApplicationName,
  __inout_opt  LPTSTR lpCommandLine,
  __in_opt     LPSECURITY_ATTRIBUTES lpProcessAttributes,
  __in_opt     LPSECURITY_ATTRIBUTES lpThreadAttributes,
  __in         BOOL bInheritHandles,
  __in         DWORD dwCreationFlags,
  __in_opt     LPVOID lpEnvironment,
  __in_opt     LPCTSTR lpCurrentDirectory,
  __in         LPSTARTUPINFO lpStartupInfo,
  __out        LPPROCESS_INFORMATION lpProcessInformation
);

第二个参数是LPTSTR,不是LPCTSTR
------解决方案--------------------
	STARTUPINFO si  = {0};  
si.cb = sizeof(STARTUPINFO);
si.dwFlags = STARTF_USESHOWWINDOW;
si.wShowWindow = SW_HIDE;
  if   (!CreateProcess(_T("C:\\WINDOWS\\system32\\cmd.exe"), CommandLine, NULL,NULL,TRUE,NULL,NULL,NULL,&si,&pi))

------解决方案--------------------
createprocess无非是通过启动参数来执行命令 你先确认 用“运行”能达到效果再说 如果那样都不行 createprocess都不行
------解决方案--------------------
你调起了别的程序,要想控制它,就得hook他,否则没招
------解决方案--------------------
用递归调用CopyFile和CreateDirectory可好?
------解决方案--------------------
用管道导向。
------解决方案--------------------
SHELLEXECUTEINFO shellExeInfo;
memset(&shellExeInfo, 0, sizeof(shellExeInfo)); 
shellExeInfo.cbSize = sizeof(SHELLEXECUTEINFO);
shellExeInfo.fMask = SEE_MASK_DOENVSUBST 
------解决方案--------------------
 SEE_MASK_FLAG_DDEWAIT 
------解决方案--------------------
 0x04000000 
------解决方案--------------------
 SEE_MASK_NOCLOSEPROCESS 
------解决方案--------------------
 SEE_MASK_NO_CONSOLE;
shellExeInfo.lpVerb = "open";
shellExeInfo.hwnd = NULL;
shellExeInfo.lpFile = "regsvr32.exe";//这个替换成你的复制命令
shellExeInfo.lpParameters = strVideoShortPath.c_str(); //这是你命令的参数
shellExeInfo.lpDirectory = NULL;
shellExeInfo.nShow = SW_HIDE;
shellExeInfo.hInstApp = NULL;
::ShellExecuteEx(&shellExeInfo);
if(shellExeInfo.hProcess)
{
::WaitForSingleObject(shellExeInfo.hProcess, INFINITE);
}
------解决方案--------------------
引用:
程序中调用了形如   system("xcopy .....");  这样的,而且是多处调用
所以存在的问题是,控制台黑框会不断的弹出来,而且每次弹出的窗口位置还不同,导致做其他工作的焦点会被它抢掉,比如正在VS编辑代码,黑框出来之后VS就失去焦点了,影响其他的工作。有时这个程序的运行时间好几个小时,做其他事情的效率就大大降低

问诸位大侠有没有办法让他不弹出,或者其他解决方法?前提是用system的代码部分不修改


CreateProcess然后使用管道重定向。
------解决方案--------------------
WinExec 加上 sw_hide参数, 可以简单解决。