La papelera de reciclaje se encuentra en el Path '\$Recycle.Bin'. Lo siguiente es preparar una función que sume los tamaños de los archivos. Dado que esos tamaños pueden exceder el límite de un entero de 32 bits, lo haremos para int64 con la API de windows.
function GetFolderSize(Folder: String): int64;
var
wfd: WIN32_FIND_DATA;
hFind: THANDLE;
begin
Result:= 0;
hFind:= FindFirstFile(PChar(Folder + '\*.*'), wfd);
if hFind <> INVALID_HANDLE_VALUE then
begin
repeat
if(String(wfd.cFileName) <> '.') and (String(wfd.cFileName) <> '..') then
begin
if wfd.dwFileAttributes and FILE_ATTRIBUTE_DIRECTORY <> 0 then
Result:= Result + GetFolderSize(Folder + '\' + wfd.cFileName)
else
Result:= Result + ((wfd.nFileSizeHigh shl 32) or wfd.nFileSizeLow);
end;
until not FindNextFile(hFind, wfd);
windows.FindClose(hFind);
end;
end;
El uso para la papelera de reciclaje es así:
Label1.Caption:= IntToStr(GetFolderSize('\$Recycle.Bin'));
Hay que tener en cuenta que la papelera que va a usar es la del usuario actual. Si existen mas usuarios, sus papeleras no serán evaluadas.
Saludos.