请问如何调用系统功能(未公开的API?)进行目录的复制、移动?(100分)

  • 主题发起人 主题发起人 叮叮当当
  • 开始时间 开始时间

叮叮当当

Unregistered / Unconfirmed
GUEST, unregistred user!
我记得好像 ShellExecute 可以的?
 
文件的拷贝,对目录同样使用。只需要将FO_COPY改一下就可以做移动操作了。<br>uses ShellApi;<br><br>function CopyFile(SourceName, TargetName: string): Boolean;<br>var<br>&nbsp; F: TShFileOpStruct;<br>begin<br>&nbsp; F.wnd := Handle;<br>&nbsp; F.wFunc := FO_COPY; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {操作方式}<br>&nbsp; F.pFrom := PChar(SourceName + #0#0);<br>&nbsp; F.pTo := PChar(TargetName + #0#0);<br>&nbsp; F.fFlags := FOF_ALLOWUNDO or FOF_RENAMEONCOLLISION;<br>&nbsp; result := ShFileOperation(F) = 0;<br>end;
 
SHFileOperation
 
用AHM2000里有关文件的控件,功能强大。
 
改成 FO_MOVE<br><br>复制的例子,将FO_COPY改成FO_MOVE就成了移动了。<br>uses shellapi;<br><br>function CopyFile(SourceName, TargetName: string): Boolean;<br>var<br>&nbsp; F: TShFileOpStruct;<br>begin<br>&nbsp; F.wnd := Form1.Handle;<br>&nbsp; F.wFunc := FO_COPY; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {操作方式}<br>&nbsp; F.pFrom := PChar(SourceName + #0#0);<br>&nbsp; F.pTo := PChar(TargetName + #0#0);<br>&nbsp; F.fFlags := FOF_ALLOWUNDO or FOF_RENAMEONCOLLISION;<br>&nbsp; result := ShFileOperation(F) = 0;<br>end;<br><br><br>{ TForm1 }<br><br>procedure TForm1.Button1Click(Sender: TObject);<br>begin<br>&nbsp; CopyFile('E:/Temp', 'E:/Tmp');<br>end;<br>
 
To: yzhshi<br>不要弹出确认覆盖对话框,可以么?<br><br>To: louhong<br>请问 AHM2000 控件包在哪里有下载?我的Delphi是6.0,谢谢!
 
可以,设置那个Flag,我给你看看。
 
&nbsp;F.fFlags := FOF_ALLOWUNDO or FOF_RENAMEONCOLLISION or FOF_NOCONFIRMATION;
 
另外,我希望这个目录移动/复制操作是以同步方式运行的,也就是说完全移动/复制完成后才执行后续的程序代码。
 
看Delphi带的Windows SDK,查找SHFILEOPSTRUCT,你找到的就是那个结构。
 
这个就是。<br>而且,你可以隐藏掉进度条以及不允许取消等。只需要设置FLAG
 
谢谢你,yzhshi!^_^ 我去试一下,马上回来给分。
 
源码空间(http://www.playicq.com).要注册,不过很值得。查找关键词AHM。有AHM for D6.<br>不过没源码,但可以用。
 
To: yzhshi<br>很好用,再请问一下,你说可以禁止取消,应该怎么做?
 
To: louhong<br>要注册啊?唉……算了。
 
设置参数FOF_SILENT,就不弹出拷贝界面了。也就没法取消了,对了,那个allowundo也不设置了,否则可以按右键选择撤销复制。。。
 
To: yzhshi<br>呵呵,FOF_SILENT这个在WindowsSDK Help里没有提及嘛。谢谢啦!
 
提了呀。<br>我上面给你的那个查找方法就可以找到的。
 

Similar threads

D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
D
回复
0
查看
889
DelphiTeacher的专栏
D
后退
顶部