Subversion Repositories recyclebinunit

Compare Revisions

Regard whitespace Rev 88 → Rev 89

/trunk/Recycle Bin Unit v2/RecBinUnit2.pas
161,7 → 161,7
// TODO: Wie sieht es aus mit Laufwerken, die nur als Mount-Point eingebunden sind?
TRbDrive = class(TObject)
strict private
FDriveLetter: Char;
FDriveLetter: AnsiChar;
 
function OldCapacityPercent(var res: integer): boolean; // in % (0-100)
function NewCapacityAbsolute(var res: integer): boolean; // in MB
178,12 → 178,12
 
// TODO: get drive serial
public
constructor Create(ADriveLetter: Char);
constructor Create(ADriveLetter: AnsiChar);
 
// Wenn UserSID='', dann werden alle Recycler gefunden
procedure ListRecycleBins(list: TObjectList{TRbRecycleBin}; UserSID: string='');
 
property DriveLetter: Char read FDriveLetter;
property DriveLetter: AnsiChar read FDriveLetter;
property VolumeGUID: TGUID read GetVolumeGUID;
property VolumeGUIDAvailable: boolean read GetVolumeGUIDAvailable;
function GetAPIInfo: TSHQueryRBInfo;
201,7 → 201,7
TRecycleBinManager = class(TObject)
public
class procedure ListDrives(list: TObjectList{TRbDrive}); static;
class function RecycleBinPossible(Drive: Char): boolean; static;
class function RecycleBinPossible(Drive: AnsiChar): boolean; static;
 
class function OwnRecyclersSize: int64; static;
class function OwnRecyclersNumItems: int64; static;
364,7 → 364,7
 
type
TSHQueryRecycleBin = function(pszRootPath: LPCTSTR; var pSHQueryRBInfo: TSHQueryRBInfo): HRESULT; stdcall;
TGetVolumeNameForVolumeMountPoint = function(lpszVolumeMountPoint: LPCTSTR; lpszVolumeName: LPTSTR; cchBufferLength: DWORD): BOOL; stdcall;
TGetVolumeNameForVolumeMountPointA = function(lpszVolumeMountPoint: LPCSTR; lpszVolumeName: LPSTR; cchBufferLength: DWORD): BOOL; stdcall;
TSHEmptyRecycleBin = function(Wnd: HWND; pszRootPath: PChar; dwFlags: DWORD): HRESULT; stdcall;
TSHGetSettings = procedure(var lpss: SHELLSTATE; dwMask: DWORD); stdcall;
TSHGetSetSettings = procedure(var lpss: SHELLSTATE; dwMask: DWORD; bSet: BOOL); stdcall;
381,11 → 381,11
s := Copy(s, 1, Length(s)-1);
end;
 
function GetDriveGUID(driveLetter: Char; var guid: TGUID): DWORD;
function GetDriveGUID(driveLetter: AnsiChar; var guid: TGUID): DWORD;
var
Buffer: array[0..50] of AnsiChar;
x: string;
PGetVolumeNameForVolumeMountPoint: TGetVolumeNameForVolumeMountPoint;
PGetVolumeNameForVolumeMountPointA: TGetVolumeNameForVolumeMountPointA;
RBHandle: THandle;
begin
RBHandle := LoadLibrary(kernel32);
392,8 → 392,8
try
if RBHandle <> 0 then
begin
PGetVolumeNameForVolumeMountPoint := GetProcAddress(RBHandle, C_GetVolumeNameForVolumeMountPoint);
if not Assigned(@PGetVolumeNameForVolumeMountPoint) then
PGetVolumeNameForVolumeMountPointA := GetProcAddress(RBHandle, C_GetVolumeNameForVolumeMountPoint);
if not Assigned(@PGetVolumeNameForVolumeMountPointA) then
begin
result := GetLastError;
FreeLibrary(RBHandle);
401,9 → 401,9
end
else
begin
if PGetVolumeNameForVolumeMountPoint(PAnsiChar(driveLetter+':\'), Buffer, SizeOf(Buffer)) then
if PGetVolumeNameForVolumeMountPointA(PAnsiChar(AnsiString(driveLetter+':\')), Buffer, SizeOf(Buffer)) then
begin
x := buffer;
x := string(buffer);
x := copy(x, 11, 38);
guid := StringToGUID(x);
result := ERROR_SUCCESS;
480,11 → 480,11
end;
end;
 
function DriveLetterToDriveNumber(driveLetter: Char): integer;
function DriveLetterToDriveNumber(driveLetter: AnsiChar): integer;
var
tmp: string;
begin
tmp := LowerCase(driveLetter);
tmp := LowerCase(string(driveLetter));
result := Ord(tmp[1])-Ord('a');
end;
 
948,11 → 948,11
// see http://www.delphipraxis.net/post2933.html
if not GetLogicalDrives and (1 shl DriveNumber) <> 0 then
begin
raise EInvalidDrive.CreateFmt(LNG_DRIVE_NOT_EXISTING, [UpperCase(FDriveLetter)+':']);
raise EInvalidDrive.CreateFmt(LNG_DRIVE_NOT_EXISTING, [UpperCase(string(FDriveLetter))+':']);
end;
end;
 
constructor TRbDrive.Create(ADriveLetter: Char);
constructor TRbDrive.Create(ADriveLetter: AnsiChar);
begin
inherited Create;
 
1095,7 → 1095,7
// Er wird bei der ersten Ă„nderung der Papierkorb-Einstellungen erstellt.
if reg.OpenKeyReadOnly('SOFTWARE\Microsoft\Windows\CurrentVersion\explorer\BitBucket') then
begin
if reg.OpenKeyReadOnly(FDriveLetter) then
if reg.OpenKeyReadOnly(string(FDriveLetter)) then
begin
if reg.ValueExists('Percent') then
begin
1193,7 → 1193,7
// Er wird bei der ersten Ă„nderung der Papierkorb-Einstellungen erstellt.
if reg.OpenKeyReadOnly('SOFTWARE\Microsoft\Windows\CurrentVersion\explorer\BitBucket') then
begin
if reg.OpenKeyReadOnly(FDriveLetter) then
if reg.OpenKeyReadOnly(string(FDriveLetter)) then
begin
if reg.ValueExists('NukeOnDelete') then
begin
1376,11 → 1376,11
if r.sourceAnsi[0] = #0 then
begin
FRemovedEntry := true;
r.sourceAnsi[0] := FSourceDrive;
r.sourceAnsi[0] := AnsiChar(FSourceDrive);
end;
 
FSourceAnsi := r.sourceAnsi;
FSourceUnicode := r.sourceAnsi; // Unicode does not exist in INFO(1) structure
FSourceUnicode := WideString(r.sourceAnsi); // Unicode does not exist in INFO(1) structure
FID := IntToStr(r.recordNumber);
FDeletionTime := FileTimeToDateTime(r.deletionTime);
FOriginalSize := r.originalSize;
1414,7 → 1414,7
 
// e.g. C:\...\DC0.doc
result := IncludeTrailingPathDelimiter(ExtractFilePath(IndexFile)) +
'D' + (* SourceDrive *) SourceAnsi[1] + ID + ExtractFileExt(SourceAnsi);
'D' + (* SourceDrive *) Source[1] + ID + ExtractFileExt(Source);
end;
 
constructor TRbInfoAItem.Create(fs: TStream; AIndexFile: string);
1529,7 → 1529,7
FSourceAnsi := AnsiString(r1.sourceUnicode); // Invalid chars are automatically converted into '?'
FSourceUnicode := WideString(r1.sourceUnicode);
FID := ''; // will be added manually (at the constructor)
FSourceDrive := AnsiChar(r1.sourceUnicode[1]);
FSourceDrive := r1.sourceUnicode[1];
FDeletionTime := FileTimeToDateTime(r1.deletionTime);
FOriginalSize := r1.originalSize;
end
1544,7 → 1544,7
FSourceAnsi := AnsiString(WideString(r2sourceUnicode)); // Invalid chars are automatically converted into '?'
FSourceUnicode := WideString(r2sourceUnicode);
FID := ''; // will be added manually (at the constructor)
FSourceDrive := AnsiChar(r2sourceUnicode[1]);
FSourceDrive := r2sourceUnicode[1];
FDeletionTime := FileTimeToDateTime(r2.deletionTime);
FOriginalSize := r2.originalSize;
end
1781,7 → 1781,7
 
class procedure TRecycleBinManager.ListDrives(list: TObjectList{TRbDrive});
var
drive: Char;
drive: AnsiChar;
begin
for drive := 'A' to 'Z' do
if RecycleBinPossible(drive) then
1846,7 → 1846,7
end;
end;
 
class function TRecycleBinManager.RecycleBinPossible(Drive: Char): boolean;
class function TRecycleBinManager.RecycleBinPossible(Drive: AnsiChar): boolean;
var
typ: Integer;
begin
2327,9 → 2327,11
reg: TRegistry;
rbuf: array[0..255] of byte;
 
dwResult: DWORD;
//dwResult: DWORD;
lpdwResult: PDWORD_PTR;
begin
PSHGetSetSettings := nil;
lpdwResult := nil;
 
RBHandle := LoadLibrary(shell32);
try
2360,7 → 2362,7
SendMessageTimeout (
HWND_BROADCAST, WM_SETTINGCHANGE,
0, lParam (pChar ('ShellState')),
SMTO_ABORTIFHUNG, 5000, dwResult
SMTO_ABORTIFHUNG, 5000, lpdwResult(*dwResult*)
);
end
else
2390,7 → 2392,7
SendMessageTimeout (
HWND_BROADCAST, WM_SETTINGCHANGE,
0, lParam (pChar ('ShellState')),
SMTO_ABORTIFHUNG, 5000, dwResult
SMTO_ABORTIFHUNG, 5000, lpdwResult(*dwResult*)
);
 
reg.CloseKey;