Hallo zusammen,
ich benutze die folgenden zwei Funktionen in einer 32Bit-Anwendung um die Größe des Papierkorbes zu ermitteln :
Delphi-Quellcode:
type
//
// Declarations for the infos about the recycle bin
//
PSHQueryRBInfo = ^TSHQueryRBInfo;
TSHQueryRBInfo = packed record
cbSize: DWORD;
i64Size: Int64;
i64NumItems: Int64;
end;
function SHQueryRecycleBin(szRootPath: PAnsiChar; SHQueryRBInfo: PSHQueryRBInfo): HResult;
stdcall; external 'shell32.dll' 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;
function RecycleBinInfo(const Drive: PAnsiChar; out BinSize, FileCount: Int64): Boolean;
var
DllVersion : integer;
SHQueryRBInfo : TSHQueryRBInfo;
r : HResult;
begin
Result := true;
BinSize := 0;
FileCount := 0;
DllVersion := GetDllVersion(PChar('shell32.dll'));
if DllVersion >= $00040048 then
begin
FillChar(SHQueryRBInfo, SizeOf(TSHQueryRBInfo), #0);
SHQueryRBInfo.cbSize := SizeOf(TSHQueryRBInfo);
R := SHQueryRecycleBin(Drive, @SHQueryRBInfo);
if r = s_OK then
begin
BinSize := SHQueryRBInfo.i64Size;
FileCount := SHQueryRBInfo.i64NumItems;
end
else
Result := false;
end;
end;
Die Ermittlung der Größe des Papierkorbes und die Anzahl der Dateien funktioniert in einer 32Bit Anwendung hervorragend. Bei einer 64Bit Anwendung wird mir aber lediglich nur 0 für die Größe und für die Anzahl der Dateien ausgegeben. Was muss ich ändern, damit die Funktion in einer 64Bit Anwendung funktinoinert ?