拷来的一段代码
uses Windows, Classes, ShellAPI; const 
FOF_DEFAULT_IDEAL = FOF_MULTIDESTFILES + FOF_RENAMEONCOLLISION + FOF_NOCONFIRMATION + FOF_ALLOWUNDO + 
FOF_FILESONLY + FOF_NOCONFIRMMKDIR + FOF_NOERRORUI + FOF_SIMPLEPROGRESS; 
FOF_DEFAULT_DELTREE = FOF_NOCONFIRMATION + FOF_ALLOWUNDO + FOF_NOERRORUI; 
FOF_DEFAULT_COPY = FOF_NOCONFIRMATION + FOF_ALLOWUNDO + FOF_NOCONFIRMMKDIR + FOF_NOERRORUI + FOF_MULTIDESTFILES; 
FOF_DEFAULT_DELFILES = FOF_DEFAULT_DELTREE; function ShellDeleteFiles( hWnd : THandle ; const DirName : string; Flags : FILEOP_FLAGS; WinTitle : PChar ) : integer; 
{---------------------------------------------------------------------------------------------} 
{Apaga arquivos/Diretorios atraves do shell do windows} 
//Notas: Ver comentario sobre o uso de duplo #0 nos parametros de Origem e destino 
var 
FileOpShell : TSHFileOpStruct; 
Oper : array[0..1024] of char; 
begin 
if WinTitle <> nil then begin 
Flags:=Flags + FOF_SIMPLEPROGRESS; 
end; 
with FileOpShell do begin 
wFunc:=FO_DELETE; 
pFrom:=Oper; 
pTo:=Oper; //pra garantir a rapadura! 
fFlags:=Flags; 
lpszProgressTitle:=WinTitle; 
Wnd:=hWnd; 
hNameMappings:=nil; 
fAnyOperationsAborted:=False; 
end; 
StrPCopy( Oper, DirName ); 
StrCat(Oper, PChar( ExtractFileName( FindFirstChildFile( DirName )) ) ); 
Result:=0; 
try 
while Oper <> EmptyStr do begin 
Result:=ShFileOperation( FileOpShell ); 
if FileOpShell.fAnyOperationsAborted then begin 
Result:=ERROR_REQUEST_ABORTED; 
break; 
end else begin 
if Result <> 0 then begin 
Break; 
end; 
end; 
StrPCopy(Oper, FindFirstChildFile( DirName ) ); 
end; 
except 
Result:=ERROR_EXCEPTION_IN_SERVICE; 
end; 
end;