调用system函数时,如何隐藏其dos窗口

现在要运行一个基于命令行的程序,使用system函数,启动后出现一个dos窗口,由于时间比较长,不美观,想要隐藏这个窗口,不知道有什么办法。  
 
用其他的函数(如shellexec)不知道是否可行。  
---------------------------------------------------------------  
 
system函数好象没有提供这样的功能  
你可以使用CreateProcess来启动一个进程  
BOOL  CreateProcess(  
   LPCTSTR  lpApplicationName,                                  //  name  of  executable  module  
   LPTSTR  lpCommandLine,                                            //  command  line  string  
   LPSECURITY_ATTRIBUTES  lpProcessAttributes,  //  SD  
   LPSECURITY_ATTRIBUTES  lpThreadAttributes,    //  SD  
   BOOL  bInheritHandles,                                            //  handle  inheritance  option  
   DWORD  dwCreationFlags,                                          //  creation  flags  
   LPVOID  lpEnvironment,                                            //  new  environment  block  
   LPCTSTR  lpCurrentDirectory,                                //  current  directory  name  
   LPSTARTUPINFO  lpStartupInfo,                              //  startup  information  
   LPPROCESS_INFORMATION  lpProcessInformation  //  process  information  
);  
把dwCreationFlags这个参数设置为CREATE_NO_WINDOW  
这个对console程序有效,对纯DOS下的程序无效  
 
希望对你有所帮助!  
---------------------------------------------------------------  
 
使用WinExec可以的,不过你得知道使用的应用程序的名称  
---------------------------------------------------------------  
 
ShellExecute(...................,  SW_HIDE)  
---------------------------------------------------------------  
 
用这个  WinExec("xxx.exe",  0);  我用过不会显示  Dos  程序的窗体。  
---------------------------------------------------------------  
 
也可以使用ShellExecute();  
 
ShellExecute(NULL,  NULL,"xxx.exe",  NULL,  NULL,  SW_SHOWNORMAL);  
---------------------------------------------------------------  
 
ShellExecute,WinExce都可以达到这个要求  
---------------------------------------------------------------  
 
ShellExecute(NULL,  NULL,"xxx.exe",  NULL,  NULL,  SW_HIDE);  
WinExec("xxx.exe",  SW_HIDE);  
---------------------------------------------------------------  
 
要是我就使用CreateProcess函数,不但可以达到你的功能,还能重新定向标准的输入输出等等,因为有时候你不但要执行他,还要获取他执行的结果啊  
BOOL  CreateProcess(  
   LPCTSTR  lpApplicationName,                                  //  name  of  executable  module  
   LPTSTR  lpCommandLine,                                            //  command  line  string  
   LPSECURITY_ATTRIBUTES  lpProcessAttributes,  //  SD  
   LPSECURITY_ATTRIBUTES  lpThreadAttributes,    //  SD  
   BOOL  bInheritHandles,                                            //  handle  inheritance  option  
   DWORD  dwCreationFlags,                                          //  creation  flags  
   LPVOID  lpEnvironment,                                            //  new  environment  block  
   LPCTSTR  lpCurrentDirectory,                                //  current  directory  name  
   LPSTARTUPINFO  lpStartupInfo,                              //  startup  information  
   LPPROCESS_INFORMATION  lpProcessInformation  //  process  information  
);  
通过后两个参数你可以做很多有意义的事  
---------------------------------------------------------------  
 
用CreateProcess,最后一个参数有进程句柄。调用WaitForSingleObject即可,如:  
PROCESS_INFORMATION  pi={0};  
           if(CreateProcess(NULL,cmdLine,NULL,NULL,TRUE,NULL,NULL,NULL,&s,&pi))  
           {  
                       WaitForSingleObject(pi.hProcess  ,INFINITE);    
                       //等待进程执行完毕    
                       CloseHandle(pi.hProcess  );    
                       CloseHandle(pi.hThread  );    
           }  
---------------------------------------------------------------  
 
是的,和上面几位一样,此时我推荐使用  CreateProcess  来代替  system  设置创建时的参数为  CREATE_NO_WINDOW  来阻目  Dos  窗口的显示,如下所示  :  
 
STARTUPINFO  si;  
ZeroMemory(&si,  sizeof(si));  
si.cb  =  sizeof  STARTUPINFO;  
 
PROCESS_INFORMATION  pi;  
BOOL  res  =  CreateProcess(NULL,  
"c://winnt//system32//cmd.exe",  //  执行你的  dos  命令  
NULL,  
NULL,  
NULL,  
NORMAL_PRIORITY_CLASS    ¦  CREATE_NO_WINDOW,  
NULL,  
NULL,  
&si,  
&pi);  
 
if  (TRUE  ==  res)  
{  
CloseHandle(pi.hProcess);  
CloseHandle(pi.hThread);  
}  
 
 
不要忘记了释放资源哦,  good  luck.  ^_^

你可能感兴趣的:(C/C++)