在Delphi中如何实现 DOS的这个命令 Xcopy C:\program\*.* D:\program\ . 说具体点!  我用shellExcute()打开一个*.exe的时候同时想在桌面上增加一个快捷方式,该如何做?

解决方案 »

  1.   

    创建快捷方式:在c:\创建一个快捷方式名为a,指向c:\test.exe
    procedure TForm1.Button1Click(Sender: TObject);
    var
    m,a:Variant;
    begin
    M:= CreateOleObject('WScript.Shell');
    A:=M.CreateShortcut('c:\a.lnk');
    A.TarGetPath:='C:\test.exe';
    a.WorkingDirectory:= 'C:\';
    A.Save;A:= Unassigned;
    M:= Unassigned;
    end;
      

  2.   

    你用记事本建立一个bat文件
    文本类容如下
    copy C:\program\*.* D:\program\ 注意保存的时候你要用.bat格式
    在delphi中用
    shellExecute()执行该文件,你设置其中打开bat文件的窗体为隐藏类型,执行后关闭即可建立快捷方式的代码如下,稍微修改即可使用
    procedure TForm1.Button1Click(Sender: TObject); 
    var 
    tmpObject : IUnknown; 
    tmpSLink : IShellLink; 
    tmpPFile : IPersistFile; 
    PIDL : PItemIDList; 
    StartupDirectory : array[0..MAX_PATH] of Char; 
    StartupFilename : String; 
    LinkFilename : WideString; 
    begin 
    StartupFilename := 'c:\windows\notepad.exe'; 
    tmpObject := CreateComObject(CLSID_ShellLink);//创建建立快捷方式的外壳扩展 
    tmpSLink := tmpObject as IShellLink;//取得接口 
    tmpPFile := tmpObject as IPersistFile;//用来储存*.lnk文件的接口 
    tmpSLink.SetPath(pChar(StartupFilename));//设定notepad.exe所在路径 
    tmpSLink.SetWorkingDirectory(pChar(ExtractFilePath(StartupFilename)));//设定工作目录 
    SHGetSpecialFolderLocation(0, 
    CSIDL_DESKTOPDIRECTORY, 
    PIDL);//获得桌面的Itemidlist 
    SHGetPathFromIDList(PIDL, 
    StartupDirectory);//获得桌面路径 
    LinkFilename := StartupDirectory + '\MyNotepad.lnk'; 
    tmpPFile.Save(pWChar(LinkFilename),FALSE);//保存*.lnk文件 
    end; 
      

  3.   

    我不想用*.bat .我就是想用delphi来实现。有没有WinAPI  fucntion
      

  4.   

    winexec('Xcopy C:\program\*.* D:\program\ .',0)
      

  5.   

    To lhy007() ( ) :
        
       好象是不行?
      

  6.   

    Xcopy: 试试我这个吧
    在Uses中加入ShellAPI,procedure XCopy(From, Dest: string);
    var
     T: TSHFileOpStruct;
     FromDir, Todir : pchar;
    begin
      GetMem(FromDir,Length(From)+2);
      try
        GetMem(ToDir,Length(Dest)+2);
        try
          FillChar(FromDir^,Length(From)+2,0);
          FillChar(ToDir^,Length(Dest)+2,0);      StrCopy(FromDir,PChar(From));
          StrCopy(ToDir,PChar(Dest));
          with T do
          begin
            Wnd    :=0;
            wFunc  :=FO_COPY;
            pFrom  :=FromDir;
            pTo    :=ToDir;
            fflags:=FOF_FILESONLY;
            fAnyOperationsAborted:=False;
            hNameMappings:=nil;
            lpszProgressTitle:=nil;
            if SHFileOperation(T)<>0 then
              raise Exception.Create('Copy File fail!');
          end;
        finally
          FreeMem(ToDir,Length(Dest)+2);
        end;
      finally
        FreeMem(FromDir,Length(From)+2);
      end;
    end;procedure TForm1.Button2Click(Sender: TObject);
    begin
      XCopy ('D:\Tools\DBBrowser', 'D:\TestCopy');
    end;
      

  7.   

    function CopyDirectory(const Source, Dest: string): boolean;//xcopy
    var
      fo: TSHFILEOPSTRUCT;
    begin
      FillChar(fo, SizeOf(fo), 0);
      with fo do
      begin
        Wnd := 0;
        wFunc := FO_COPY;
        pFrom := PChar(source+#0);
        pTo := PChar(Dest+#0);
        fFlags := FOF_NOCONFIRMATION+FOF_NOCONFIRMMKDIR    ;
      end;
      Result := (SHFileOperation(fo) = 0);
    end;procedure TForm1.Button1Click(Sender: TObject);
    begin
      copydirectory('c:\test','d:\');
    end;
      

  8.   

    to:  step_guo (小乙)  
    不好意思,D:\program\ .多了个空格
    winexec('Xcopy C:\program\*.* D:\program\.',0)
      

  9.   

    有什么最简单的办法在用shellExcute(),打开的同时,在桌面上增加一个快揭方式?Email: [email protected]
      

  10.   

    To: lhy007()     多谢!这个方法是可以的:有空格也可以的,不过还要加个参数!
       
      winexec('Xcopy C:\program\*.* D:\program\ /s',0)
      

  11.   

    同意 pandarus(雨季) :
       对文件或文件夹的操作都可以用TSHFILEOPSTURCT来实现。用SHELLEXECUTE好象不怎么地道吧。
      

  12.   

    创建快截方式procedure CreateLnk(LnkName:string);
    var
        AnObj:IUnknown;
        ShLink:IShellLink;
        PFile:IPersistFile;
        FileName:string;
        WFileName:WideString;
        Reg:TRegIniFile;
    begin
        //access the two interface of the object
        AnObj:=CreateComObject(CLSID_ShellLink);
        ShLink:=Anobj as IShellLink;
        PFile:=Anobj as IPersistFile;    //get the name of the application file
        FileName:=Paramstr(0);
        //set the link properties
        ShLink.SetPath(pchar(FileName));
        ShLink.SetWorkingDirectory(PChar(ExtractFilePath(FileName)));
        //save the file in the current dir
        //useing a widestring
        WFileName:=ExtractFilePath(FileName)+LnkName+'.lnk';
        PFile.Save(pwchar(WFileName),false);
        //save on the desktop
        reg:=TRegIniFile.Create('Software\MicroSoft\Windows\CurrentVersion\explorer');
        WFileName:=Reg.ReadString('Shell Folders','Desktop','')+'\'+LnkName+'.lnk';
        reg.free;
        PFile.Save(PWChar(WFileName),false);
        //save in the start menu
        reg:=TRegIniFile.Create('Software\MicroSoft\Windows\CurrentVersion\explorer');
        WFileName:=Reg.ReadString('Shell Folders','Start Menu','')+'\'+LnkName+'.lnk';
        reg.free;
        PFile.Save(PWChar(WFileName),false);
    end;