Delphi中,想把D:\ABC下的所有文件COPY到C:\,我想用DOS命令XCOPY来实现(用WinExec函数),但COPY完后黑黑的DOC窗体不能自动关闭,应用什么方法关闭它,或者执行XCOPY时根本不让它弹出来?

解决方案 »

  1.   

    我估计是可以有其他的方法的 但是我确实是没有的
    你说的这个办法我至今没有见到过去掉黑黑的DOC窗体的办法的 我就学习吧 呵呵
      

  2.   

    用wuqiu(午秋) 的吧,我原来用老版本的zip工具也是这么用的。
      

  3.   

    或使用如下函数
    function RunDOS(const Prog, CommandLine,Dir: String;var ExitCode:DWORD): String;procedure CheckResult(b: Boolean);
    begin
      if not b then
         Raise Exception.Create(SysErrorMessage(GetLastError));
    end;var
      HRead,HWrite:THandle;
      StartInfo:TStartupInfo;
      ProceInfo:TProcessInformation;
      b:Boolean;
      sa:TSecurityAttributes;
      inS:THandleStream;
      sRet:TStrings;
    begin
      Result := '';
      FillChar(sa,sizeof(sa),0);
      //设置允许继承,否则在NT和2000下无法取得输出结果
      sa.nLength := sizeof(sa);
      sa.bInheritHandle := True;
      sa.lpSecurityDescriptor := nil;
      b := CreatePipe(HRead,HWrite,@sa,0);
      CheckResult(b);  FillChar(StartInfo,SizeOf(StartInfo),0);
      StartInfo.cb := SizeOf(StartInfo);
      StartInfo.wShowWindow := SW_HIDE;
      //使用指定的句柄作为标准输入输出的文件句柄,使用指定的显示方式
      StartInfo.dwFlags     := STARTF_USESTDHANDLES+STARTF_USESHOWWINDOW;
      StartInfo.hStdError   := HWrite;
      StartInfo.hStdInput   := GetStdHandle(STD_INPUT_HANDLE);//HRead;
      StartInfo.hStdOutput  := HWrite;  b := CreateProcess(PChar(Prog),PChar(CommandLine),nil,nil,True,CREATE_NEW_CONSOLE,nil,PChar(Dir),StartInfo,ProceInfo);  CheckResult(b);
      WaitForSingleObject(ProceInfo.hProcess,INFINITE);
      GetExitCodeProcess(ProceInfo.hProcess,ExitCode);  inS := THandleStream.Create(hread);  if inS.Size>0 then
      begin
        sRet := TStringList.Create;
        sRet.LoadFromStream(inS);
        Result := sRet.Text;
        sRet.Free;
      end;
      inS.Free;  CloseHandle(HRead);
      CloseHandle(HWrite);
    end;
      

  4.   

    use shellapi;
    procedure TForm1.Button3Click(Sender: TObject);
    var
      OpStruc:TSHFileOpStruct;
      FromBuf,ToBuf:Array[0..128] of Char;
    begin
      FillChar(FromBuf,Sizeof(FromBuf),0);
      FillChar(ToBuf,Sizeof(ToBuf),0);
      //用0初始化FromBuf和ToBuf数组
      StrPCopy(FromBuf,Pchar(Edit1.Text));
      StrPCopy(ToBuf,Pchar(Edit2.Text));
      //分别在 FromBuf和ToBuf数组中填入操作的源目录及目标目录
      //开始填充OpStruc记录
      with OpStruc do
      begin
        Wnd:=Handle;
        wFunc:=FO_COPY;
      //复制操作
        pFrom:=@FromBuf;
        pTo:=@ToBuf;
        fFlags:=FOF_NOCONFIRMATION or FOF_RENAMEONCOLLISION;
        fAnyOperationsAborted:=False;
        hNameMappings:=nil;
        lpszProgressTitle:=nil;
      end;
      if SHFileOperation(OpStruc)=0 then
     //函数执行成功
      MessageBox(Handle,'复制完毕。','复制信息',MB_OK+MB_ICONINFORMATION);
    end;