崬城衞 发表于 2015-5-30 10:21:09

我在delphi中用shellExecute启动了一个程序(ftp);然后想做一个等待,只到ftp进程结束,再继续下面的操作,请问如何监控这个进程是否已结束?

我在delphi中用shellExecute启动了一个程序(ftp);然后想做一个等待,只到ftp进程结束,再继续下面的操作,请问如何监控这个进程是否已结束?Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiAPI/html/delphi_20061115114909229.html
如题,例如:   
      
         Hinstance:=   ShellExecute(Application.Handle,nil,pchar('ftp'),pchar('-i   -n   -s:'+ScriptName),nil,SW_SHOWNORMAL);   
         for   i:=0   to   10   do   
         begin   
                  sleep   1000;   
                  if   ftp_end()   then   
                              break;   
         end;  用OpenProcess配合WaitForSingleObject应该可以。
  转的   
      
   执行一个外部程序,并等待它完成   
   Function   WinExecExW(cmd,workdir:pchar;visiable:integer):DWORD;   
   var   
      StartupInfo:TStartupInfo;   
      ProcessInfo:TProcessInformation;   
   begin   
      FillChar(StartupInfo,SizeOf(StartupInfo),#0);   
      StartupInfo.cb:=SizeOf(StartupInfo);   
      StartupInfo.dwFlags:=STARTF_USESHOWWINDOW;   
      StartupInfo.wShowWindow:=visiable;   
      if   not   CreateProcess(nil,cmd,nil,nil,false,Create_new_console   or   Normal_priority_class,nil,nil,StartupInfo,ProcessInfo)   then   
            result:=0   
      else   
      begin   
            waitforsingleobject(processinfo.hProcess,INFINITE);   
            GetExitCodeProcess(ProcessInfo.hProcess,Result);   
      end;   
   end;   
   
  waitforsingleobject这个函数在xp下好象有问题,会一直等待,我现在不敢用这个;;   
      
   shellExectue   返回了进程的句柄,理论上通过   Hinstance应该是可以查看它的状态的,只是不知道具体怎么做!
  那不如自己用TIdFTP
页: [1]
查看完整版本: 我在delphi中用shellExecute启动了一个程序(ftp);然后想做一个等待,只到ftp进程结束,再继续下面的操作,请问如何监控这个进程是否已结束?