怎样在程序中清空和恢复回收站中的文件呢?(100分)

  • 主题发起人 主题发起人 Lamb
  • 开始时间 开始时间
L

Lamb

Unregistered / Unconfirmed
GUEST, unregistred user!
在Delphi程序中怎样清空和恢复回收站中的文件呢?
 
清空: 把每个盘根目录下的 RECYCLED 目录内的文件删除
恢复: 目录内 Info2 文件保存了每个文件的信息.
(没试过)
 
有没有API的方式呢?
 
SHEmptyRecycleBin
 
SHEmptyRecycleBin
应该怎样使用呢?
 
SHEmptyRecycleBin
( HWND hwnd,
LPCTSTR pszRootPath,
DWORD dwFlags);

dwFlags: SHERB_NOCONFIRMATION SHERB_NOPROGRESSUI SHERB_NOSOUND

win32api的help没有,在msdn有,不知道是不是支持win95/nt
 
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结束。
看看Delphi/Source/下SHELLAPI.pas,应该有发现。
 
近期结束
 
; 如何清空回收站

Procedure EmptyRecycleBin
Const
SHERB_NOCONFIRMATION = $00000001
SHERB_NOPROGRESSUI = $00000002
SHERB_NOSOUND = $00000004

Type
TSHEmptyRecycleBin = function (Wnd : HWND ;
LPCTSTR : PChar
DWORD : Word ) : Integer stdcall
Var
SHEmptyRecycleBin : TSHEmptyRecycleBin
LibHandle : THandle ;

Begin
LibHandle := LoadLibrary(PChar('Shell32.dll'))
If LibHandle <> 0 then
@SHEmptyRecycleBin := GetProcAddress(LibHandle, 'SHEmptyRecycleBinA')
Else
Begin
MessageDlg('Failed to load Shell32.dll.', mtError, [mbOK], 0);
Exit
End

If @SHEmptyRecycleBin <> nil then
SHEmptyRecycleBin(Application.Handle ,
'' ,
SHERB_NOCONFIRMATION or
SHERB_NOPROGRESSUI or
SHERB_NOSOUND )
FreeLibrary(LibHandle);
@SHEmptyRecycleBin := nil
End
 
多人接受答案了。
 
后退
顶部