|
|
|
#1
|
||||
|
||||
|
Quote:
Code:
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.
}
|
| The Following 2 Users Say Thank You to hitman797 For This Useful Post: | ||
audiofeel (15-10-2023), Behnam2018 (14-10-2023) | ||
| Sponsored Links |
|
#2
|
||||
|
||||
|
Quote:
@hitman797, ok, i'll add a new function to retrieve RecycleBin info in a future 'FMXInno' update. currently, there are no new features or bug fixes to push an update. so, feel free to use your own library until the next update, especially if you need it right now. Delphi DLL: Code:
library AMyDll;
{$R *.res}
const
C_M_BYTES = 1024 * 1024;
type
DWORDLONG = UInt64;
DWORD = FixedUInt;
LPCWSTR = PWideChar;
LPSHQUERYRBINFO = ^SHQUERYRBINFO;
SHQUERYRBINFO = packed record
cbSize : DWORD; // Size of struct SHQUERYRBINFO.
i64Size : DWORDLONG; // Files size in Bytes.
i64NumItems : DWORDLONG; // Files Count.
end;
function SHQueryRecycleBinW(pszRootPath: LPCWSTR; pSHQueryRBInfo: LPSHQUERYRBINFO): HResult; stdcall;
external 'shell32.dll' name 'SHQueryRecycleBinW';
function AGetRecycleBinInfo(ARootPath: WideString; var TotalSizeMB: extended;
var FileCount: Integer): Boolean; stdcall;
var
RBInfo: SHQUERYRBINFO; // Structure to store RecycleBin info
RBRoot: LPCWSTR; // Root path for the RecycleBin query
begin
try
// RBRoot <> nil --> Retrieve RecycleBin info from ARootPath.
// RBRoot = nil --> Retrieve RecycleBin info from All Drives.
if Length(ARootPath) = 0 then RBRoot := nil else RBRoot := LPCWSTR(ARootPath);
RBInfo.cbSize := SizeOf(RBInfo); // Set the size of the structure
if SHQueryRecycleBinW(RBRoot, @RBInfo) = S_OK then
begin
TotalSizeMB := RBInfo.i64Size / C_M_BYTES;
FileCount := RBInfo.i64NumItems;
Result := True;
end else
Result := False;
except
Result := False;
end;
end;
exports
AGetRecycleBinInfo;
begin
end.
InnoSetup: Code:
function AGetRecycleBinInfo(ARootPath: WideString; var TotalSizeMB: Extended; var FileCount: Integer): Boolean;
external 'AGetRecycleBinInfo@files:AMyDll.dll stdcall';
procedure TestBtnClick(Sender: TObject);
var
TotalSizeMB: Extended;
FileCount: Integer;
begin
if AGetRecycleBinInfo('', TotalSizeMB, FileCount) then
begin
Memo.Lines.Add(format('RecycleBin Files Size: < %0.2n GB >', [TotalSizeMB / 1024]));
Memo.Lines.Add(format('RecycleBin Files Count: < %d >', [FileCount]));
end else
Memo.Lines.Add('AGetRecycleBinInfo Error!')
end;
. Last edited by BLACKFIRE69; 14-07-2024 at 02:11. |
| The Following 5 Users Say Thank You to BLACKFIRE69 For This Useful Post: | ||
audiofeel (16-10-2023), Behnam2018 (16-10-2023), hitman797 (16-10-2023), Lord.Freddy (16-10-2023), Wanterlude (18-10-2023) | ||
|
#3
|
||||
|
||||
|
Quote:
I will use this library until the update is released to FMXInno.
|
| The Following User Says Thank You to hitman797 For This Useful Post: | ||
audiofeel (16-10-2023) | ||
|
#4
|
|||
|
|||
|
Quote:
I have been using your library for a long time in my distributions, as well as repacks from FMXTeam. P.S. I'm still waiting for the implementation of creating a form with a background in the form of a video. |
![]() |
| Thread Tools | Search this Thread |
| Display Modes | |
|
|
Similar Threads
|
||||
| Thread | Thread Starter | Forum | Replies | Last Post |
| Windows Fluent Effects Standalone API - InnoSetup / VCL / FXM | BLACKFIRE69 | Conversion Tutorials | 0 | 15-11-2023 17:35 |
| Windows Phone Installer similar to razor12911's original design? | Kitsune1982 | Conversion Tutorials | 0 | 02-07-2020 13:04 |
| INDEX - Conversion Tutorial Index | Razor12911 | Conversion Tutorials | 5 | 11-06-2020 02:05 |
| Frequently Asked Questions | Joe Forster/STA | PC Games - Frequently Asked Questions | 0 | 29-11-2005 09:48 |