首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

想用creatprocess或者shellexecute 来执行一个命令 如何写

2013-11-13 
想用creatprocess或者shellexecute来执行一个命令怎么写本帖最后由 empshoot 于 2013-11-12 22:11:22 编辑

想用creatprocess或者shellexecute 来执行一个命令 怎么写
本帖最后由 empshoot 于 2013-11-12 22:11:22 编辑 比如我想执行 7za.exe a D:\\test.zip D:\\test   怎么写    
还有我想不要出现那个一闪而过黑框  还有怎么知道执行完了没有
求指导

[解决办法]
给你点代码吧。

启动一个Windows控制台进程,并将其输出转向。 
截获目标进程输出的方式:
1、等待目标进程结束后读取缓冲区,并更新。
2、随时读取缓冲区并追加更新到指定输出。(但每次读之前需要清除缓冲区,否则输出重叠)
unsigned long SomeThread( LPVOID pVoid ) 

char Buffer [ 4096 ]; 
DWORD dwExit = 1; 
HANDLE hReadPipe = NULL; 
HANDLE hWritePipe = NULL; 
SECURITY_ATTRIBUTES sa; 
sa.nLength = sizeof( SECURITY_ATTRIBUTES ); 
sa.lpSecurityDescriptor = NULL; 
sa.bInheritHandle = TRUE; 
CString szCurPath  = pDlg->GetFilePath(); 
STARTUPINFO StartupInfo = { sizeof(StartupInfo) }; 
PROCESS_INFORMATION ProcessInfo = { 0 }; 
TCHAR szCommandLine[ 256 ]; // = _T("c:\\windows\\system32\\cmd.exe /c dir"); 
_tcscpy_s( szCommandLine, 256, ( szCurPath + _T("VPNRel.EXE"))); 
ZeroMemory( Buffer, 4096 ); 

if( ! CreatePipe( &hReadPipe, &hWritePipe, &sa, 0 )) 

  goto EXIT_THREAD; 

StartupInfo.cb = sizeof( STARTUPINFO ); 
GetStartupInfo( &StartupInfo ); 
StartupInfo.hStdError = hWritePipe; 
StartupInfo.hStdOutput = hWritePipe; 
StartupInfo.wShowWindow = SW_HIDE; 
StartupInfo.dwFlags = STARTF_USESHOWWINDOW 
[解决办法]
 STARTF_USESTDHANDLES; 

if( ! CreateProcess( NULL, szCommandLine, NULL, NULL, TRUE, 0, NULL, szCurPath, &StartupInfo, &ProcessInfo )) 

  goto EXIT_THREAD; 

//    - 创建目标进程成功,开始等待目标进程结束并监视其输出 
// ----------------------------目标进程输出------------------------------- 

CloseHandle( hWritePipe ); 
hWritePipe = NULL; 
while( dwExit ) 

  DWORD dwWait = WaitForSingleObject( ProcessInfo.hProcess, 200 ); 
  DWORD dwReaded; 
  ZeroMemory( Buffer, sizeof( Buffer )); // Cleaer Buffer.
  if( ReadFile( hReadPipe, Buffer, 4095, &dwReaded, NULL ) == false ) 
  { 
   if( dwWait == WAIT_TIMEOUT ) 
    continue; 
   else 
    break; 
  } 
  else 
  { 
#ifdef _UNICODE 
   TCHAR szWBuffer[ 4096 ]; 
   ZeroMemory( szWBuffer, sizeof( TCHAR ) * 4096 ); 
   MultiByteToWideChar( CP_ACP, 0, Buffer, -1, szWBuffer, 4095 ); 
   APPEND( szWBuffer );  // ==  m_strSomeEdit += szWBuffer; UpdateData( false ); 
#else 
   APPEND( Buffer ); // ==  m_strSomeEdit += Buffer; UpdateData( false ); 
#endif 
  } 
  if( dwWait == WAIT_OBJECT_0 ) 
   break; 

//--------------------------目标进程已经结束------------------------------ 
EXIT_THREAD: 
if( ProcessInfo.hProcess != NULL ) 
  CloseHandle( ProcessInfo.hProcess ); 
if( hWritePipe != NULL ) 
  CloseHandle( hWritePipe ); 
if( hReadPipe != NULL ) 
  CloseHandle( hReadPipe ); 
pDlg->m_hThread = NULL; 
return 0; 
}

[解决办法]
ShellExecute(NULL, "open","c:\\7za.exe", str, NULL, SW_HIDE);
str为参数

热点排行