//我的网上找到这样的代码:program del;
uses ShellApi;
{ 利用ShellApi中: function SHFileOperation(const lpFileOp: TSHFileOpStruct): Integer; stdcall; }
Var T:TSHFileOpStruct;
P:String;
begin
P:='C:\Windows\System\EL_CONTROL.CPL';
With T do
Begin
Wnd:=0;
wFunc:=FO_DELETE;
pFrom:=Pchar(P);
fFlags:=FOF_ALLOWUNDO
End;
SHFileOperation(T);
End.注意:
1. 给出文件的绝对路径名,否则可能不能恢复;
2. MS的文档说对于多个文件,每个文件名必须被#)字符分隔,而整个字符串必须用两个#0结束。
//但是程序执行到SHFileOperation(T);时就出错了,谁有能用的代码?

解决方案 »

  1.   

    P:='C:\Windows\System\EL_CONTROL.CPL';
    改为
    P:='C:\Windows\System\EL_CONTROL.CPL'#0;
    试试。
    前面那个只有一个默认的#0
      

  2.   

    加#0应该没有作用,PChar的类型转换会自动加上这个#0的。改成 P:='C:\\Windows\\System\\EL_CONTROL.CPL' 试试。
      

  3.   

    jadeluo: 没看清楚?这个函数需要两个#0结尾。String中本来就有一个#0的,写上#0,Delphi会在它后面再加一个#0,你可以在调试器中观察。'C:\\Windows\\System\\EL_CONTROL.CPL'是 C/C++/Java 的写法,Delphi中用不着。因为在 C/C++/Java 中,‘\’是转义符。
      

  4.   

    谢谢 agui(阿贵: 高级图形用户界面) 的提醒
      

  5.   

    function TForm1.DelToRecycled(FileName: string): Boolean;
    var f:tshfileopstruct;
    begin
      fillchar(f,sizeof(f),#0);
      f.Wnd:=application.Handle;
      f.wFunc:=FO_DELETE;
      f.pFrom:=PChar(filename);
      f.pTo:=nil;
      f.fAnyOperationsAborted:= False;
      f.hNameMappings:= Nil;
      f.lpszProgressTitle:= Nil;
      f.fFlags:={FOF_SILENT or }FOF_ALLOWUNDO{ or FOF_NOCONFIRMATION};
      result:=(shfileoperation(f)=0);
    end;
      

  6.   

    ly_liuyang: 其实楼主已经知道用法,关键是为什么“程序执行到SHFileOperation(T);时就出错了”?