我想知道ShellExceute执行成功还是失败,请问怎么得到?

解决方案 »

  1.   

    if the function succeeds, the return value is the instance handle of the application that was run, or the handle of a dynamic data exchange (DDE) server application.呵呵够详细吧!
      

  2.   

    Return ValuesIf the function succeeds, the return value is the instance handle of the application that was run, or the handle of a dynamic data exchange (DDE) server application.
    If the function fails, the return value is an error value that is less than or equal to 32. The following table lists these error values:Value Meaning
    0 The operating system is out of memory or resources.
    ERROR_FILE_NOT_FOUND The specified file was not found.
    ERROR_PATH_NOT_FOUND The specified path was not found.
    ERROR_BAD_FORMAT The .EXE file is invalid (non-Win32 .EXE or error in .EXE image).
    SE_ERR_ACCESSDENIED The operating system denied access to the specified file. 
    SE_ERR_ASSOCINCOMPLETE The filename association is incomplete or invalid.
    SE_ERR_DDEBUSY The DDE transaction could not be completed because other DDE transactions were being processed.
    SE_ERR_DDEFAIL The DDE transaction failed.
    SE_ERR_DDETIMEOUT The DDE transaction could not be completed because the request timed out.
    SE_ERR_DLLNOTFOUND The specified dynamic-link library was not found. 
    SE_ERR_FNF The specified file was not found. 
    SE_ERR_NOASSOC There is no application associated with the given filename extension.
    SE_ERR_OOM There was not enough memory to complete the operation.
    SE_ERR_PNF The specified path was not found.
    SE_ERR_SHARE
      

  3.   

    ShellExecute太差,我也是发现无法知道是否完成。不过我今天才解决,贴出来把:function ExecAndWait(const FileName, Params: ShortString; const WinState: Word): boolean; export;
    var 
      StartInfo: TStartupInfo; 
      ProcInfo: TProcessInformation; 
      CmdLine: ShortString; 
    begin {Run a executable file and wait for it}
      CmdLine := '"' + Filename + '" ' + Params;  //Put the name of file between quotes, due to spaces in names of files in system Win9x
      FillChar(StartInfo, SizeOf(StartInfo), #0); 
      with StartInfo do
      begin
        cb := SizeOf(StartInfo);
        dwFlags := STARTF_USESHOWWINDOW;
        wShowWindow := WinState;
      end;
      Result := CreateProcess(nil, PChar( String( CmdLine ) ), nil, nil, false,
                              CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS, nil,
                              PChar(ExtractFilePath(Filename)),StartInfo,ProcInfo);
      if Result then //Wait the finish of program
      begin 
        WaitForSingleObject(ProcInfo.hProcess, INFINITE);
        CloseHandle(ProcInfo.hProcess); //Free the Handles 
        CloseHandle(ProcInfo.hThread); 
      end; 
    end;