Sources
Delphi Russian Knowledge Base
DRKB - это самая большая и удобная в использовании база знаний по Дельфи в рунете, составленная Виталием Невзоровым

Как получить количество файлов в корзине и их размер?

01.01.2007
type
 
PSHQueryRBInfo = ^TSHQueryRBInfo;
 
TSHQueryRBInfo = packed record
    cbSize
: DWORD;
   
// Size of the structure, in bytes.
   
// This member must be filled in prior to calling the function.
    i64Size
: Int64;
   
// Total size of all the objects in the specified Recycle Bin, in bytes.
    i64NumItems
: Int64;
   
// Total number of items in the specified Recycle Bin.
 
end;
 
const
  shell32
= 'shell32.dll';
 
function SHQueryRecycleBin(szRootPath: PChar; SHQueryRBInfo: PSHQueryRBInfo): HResult;
  stdcall
; external shell32 Name 'SHQueryRecycleBinA';
 
function GetDllVersion(FileName: string): Integer;
var
 
InfoSize, Wnd: DWORD;
 
VerBuf: Pointer;
  FI
: PVSFixedFileInfo;
 
VerSize: DWORD;
begin
 
Result   := 0;
 
InfoSize := GetFileVersionInfoSize(PChar(FileName), Wnd);
 
if InfoSize <> 0 then
 
begin
   
GetMem(VerBuf, InfoSize);
   
try
     
if GetFileVersionInfo(PChar(FileName), Wnd, InfoSize, VerBuf) then
       
if VerQueryValue(VerBuf, '\', Pointer(FI), VerSize) then
          Result := FI.dwFileVersionMS;
    finally
      FreeMem(VerBuf);
    end;
  end;
end;
 
procedure TForm1.Button1Click(Sender: TObject);
var
  DllVersion: integer;
  SHQueryRBInfo: TSHQueryRBInfo;
  r: HResult;
begin
  DllVersion := GetDllVersion(PChar(shell32));
  if DllVersion >= $00040048 then
  begin
    FillChar(SHQueryRBInfo, SizeOf(TSHQueryRBInfo), #0);
    SHQueryRBInfo.cbSize := SizeOf(TSHQueryRBInfo);
    R := SHQueryRecycleBin(nil, @SHQueryRBInfo);
    if r = s_OK then
    begin
      label1.Caption := Format('
Size:%d Items:%d',
        [SHQueryRBInfo.i64Size, SHQueryRBInfo.i64NumItems]);
    end
    else
      label1.Caption := Format('
Err:%x', [r]);
  end;
end;
 
{
 
The SHQueryRecycleBin API used in this method is
only available on systems with the latest shell32.dll installed with IE4 /
Active Desktop.
 
}