用Delphi編程實(shí)現(xiàn)清空回收站功能

字號:

本程序演示如何通過程序來清空回收站。
    向窗體上添加一個(gè)TButton組件,它用于激活清空回收站的操作。
    首先在程序的implementation段中定義3個(gè)常數(shù)和一個(gè)類型聲明,代碼如下:
    const
    SHERB_NOCONFIRMATION = $00000001 ;
    SHERB_NOPROGRESSUI = $00000002 ;
    SHERB_NOSOUND = $00000004 ;
    type
    TSHEmptyRecycleBin=
    function(Wnd:HWND;LPCTSTR:PChar;DWORD:Word):Integer;stdcall;
    程序運(yùn)行初期,程序首先會(huì)通過LoadLibrary函數(shù)加載動(dòng)態(tài)鏈接庫Shell32.dll,并且把加載后的操作句柄存儲(chǔ)在LibHandle中。然后通過@SHEmptyRecycleBin:=GetProcAddress (LibHandle, ’SHEmptyRecycleBinA’)語句讀取SHEmptyRecycleBinA函數(shù)的地址,如果以上語句能夠正確執(zhí)行(也就是@SHEmptyRecycleBin不等于nil),那么就調(diào)用SHEmptyRecycleBin完成清空回收站的操作。最后釋放動(dòng)態(tài)鏈接庫。響應(yīng)代碼如下:
    procedure TForm1.Button1Click(Sender: TObject);
    var
    SHEmptyRecycleBin:TSHEmptyRecycleBin;
    LibHandle:THandle;
    begin
    LibHandle := LoadLibrary(PChar(’Shell32.dll’)) ;
    if LibHandle <> 0 then
    begin
    @SHEmptyRecycleBin := GetProcAddress(LibHandle, ’SHEmptyRecycleBinA’);
    end
    else
    begin
    MessageDlg(’Failed to load Shell32.dll.’, mtError, [mbOK], 0);
    Exit ;
    end ;
    if @SHEmptyRecycleBin <> nil then
    begin
    SHEmptyRecycleBin(Application.Handle,’’,SHERB_NOCONFIRMATION or
    SHERB_NOPROGRESSUI or SHERB_NOSOUND) ;
    end;
    FreeLibrary(LibHandle);
    @SHEmptyRecycleBin := nil ;
    end;
    程序代碼如下:
    unit Unit1;
    interface
    uses
    Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
    Dialogs, StdCtrls;
    type
    TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
    private
    { Private declarations }
    public
    { Public declarations }
    end;
    var
    Form1: TForm1;
    implementation
    const
    SHERB_NOCONFIRMATION = $00000001 ;
    SHERB_NOPROGRESSUI = $00000002 ;
    SHERB_NOSOUND = $00000004 ;
    type
    TSHEmptyRecycleBin=function(Wnd:HWND;LPCTSTR:PChar;DWORD:Word):Integer;stdcall;
    {$R *.dfm}
    procedure TForm1.Button1Click(Sender: TObject);
    var
    SHEmptyRecycleBin:TSHEmptyRecycleBin;
    LibHandle:THandle;
    begin
    LibHandle := LoadLibrary(PChar(’Shell32.dll’)) ;
    if LibHandle <> 0 then
    begin
    @SHEmptyRecycleBin := GetProcAddress(LibHandle, ’SHEmptyRecycleBinA’);
    end
    else
    begin
    MessageDlg(’Failed to load Shell32.dll.’, mtError, [mbOK], 0);
    Exit ;
    end ;
    if @SHEmptyRecycleBin <> nil then
    begin
    SHEmptyRecycleBin(Application.Handle,’’,SHERB_NOCONFIRMATION or SHERB_NOPROGRESSUI or SHERB_NOSOUND) ;
    end;
    FreeLibrary(LibHandle);
    @SHEmptyRecycleBin := nil ;
    end;
    end.