(一)用程序控制winrar压缩文件没问题,但是我如何得知压缩文件结束了?
(二)在压缩文件的时候会自动弹出winrar的压缩进度,我不想让他弹出来,能不能直接在程序里显示压缩进度?
有劳各位了!!谢谢。

解决方案 »

  1.   

    (一)
    var
      SUInfo: TStartupInfo;
      ProcInfo: TProcessInformation;
    begin
      FillChar(SUInfo, SizeOf(SUInfo), 0);
      with SUInfo do
      begin
        cb := SizeOf(SUInfo);
        dwFlags := STARTF_USESHOWWINDOW or STARTF_FORCEONFEEDBACK;
        wShowWindow := SW_SHOW;
      end;
      if CreateProcess(nil, PChar('路径\Winrar.exe 参数'), nil, nil, False,
        CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS, nil,nil, SUInfo, ProcInfo) then
      begin
        WaitForSingleObject(ProcInfo.hProcess, INFINITE);
        CloseHandle(ProcInfo.hProcess);
        CloseHandle(ProcInfo.hThread);
        ShowMessage('压缩完毕');
      end;
    end;(二)这个只能由Winara自己控制,你查看Winrar的帮助,看是否有这样一个运行时参数来控制它,如果有,可以写到上面的CreateProcess中。
    ————————————————————————————————————
    宠辱不惊,看庭前花开花落,去留无意;毁誉由人,望天上云卷云舒,聚散任风。
    ————————————————————————————————————
      

  2.   

    var
      SHExecInfo: SHELLEXECUTEINFO;
    begin
     SHExecInfo.cbSize := sizeof(SHELLEXECUTEINFO);
      SHExecInfo.fMask := SEE_MASK_NOCLOSEPROCESS;
      SHExecInfo.Wnd := Handle;
      SHExecInfo.lpVerb := nil;
      SHExecInfo.lpFile := 'WinRAR.exe';
      SHExecInfo.lpParameters := 'a e:\qwqw.rar e:\qwqw';
      SHExecInfo.lpDirectory := nil;
      SHExecInfo.nShow := SW_SHOW;
      SHExecInfo.hInstApp := Handle;
      ShellExecuteEx(@SHExecInfo);
      WaitForSingleObject(SHExecInfo.hProcess, INFINITE);
      closeHandle(SHExecInfo.hProcess);
      ShellExecute(application.MainForm.Handle,'open','winrar.exe',PChar('a e:\zqzq.rar e:\zqzq'),'',SW_show);
    ShowMessage('压缩完毕!'); }