Einzelnen Beitrag anzeigen

MathiasSimmack
(Gast)

n/a Beiträge
 
#1

Vor dem Leeren prüfen, ob Dateien im Papierkorb sind

  Alt 17. Jun 2002, 09:06
Im EDH (Easy Delphi Helper) gibt es eine Funktion, mit der man den Papierkorb leeren kann. Das würde ich allerdings davon abhängig machen, ob denn überhaupt Dateien vorhanden sind. Und dafür habe ich diese Funktion von NicoDE ausgegraben, die IMHO unbedingt in unsere Bibliothek gehört:

Delphi-Quellcode:
type
  TSHQueryRBInfo =
    packed record
      cbSize : dword;
      i64Size : int64;
      i64NumItems : int64;
    end;
  TSHQueryRecycleBin = function(pszRootPath: LPCTSTR;
    var pSHQueryRBInfo: TSHQueryRBInfo): HRESULT; stdcall;

var
  SHQueryRecycleBin : TSHQueryRecycleBin = nil;
  RBHandle : THandle = 0;
  RBInfo : TSHQueryRBInfo;

begin
  RBHandle := LoadLibrary('shell32.dll');
  if(RBHandle <> 0) then
  begin
    SHQueryRecycleBin := GetProcAddress(RBHandle,'SHQueryRecycleBinA');
    if(@SHQueryRecycleBin = nil) then
    begin
      FreeLibrary(RBHandle); RBHandle := 0;
    end;
  end;

  fillchar(RBInfo,sizeof(TSHQueryRBInfo),0);
  RBinfo.cbSize := sizeof(TSHQueryRBInfo);

  if(RBHandle <> 0) and (assigned(SHQueryRecycleBin)) then
    if(SHQueryRecycleBin('',RBInfo) = S_OK) then
      if(RBInfo.i64NumItems > 0) then
      begin
        // Daten vorhanden, Papierkorb kann geleert werden!
        // (s. Funktion im EDH)
      end;

  if(RBHandle <> 0) then FreeLibrary(RBHandle);
end.
Das meiste sollte verständlich sein. Wichtig ist nur die Zeile
if(RBInfo.i64NumItems > 0) then In dem Fall könnt ihr davon ausgehen, dass sich etwas im Papierkorb befindet, was dann auch gelöscht werden kann. Interessant zu wissen ist, dass die unsichtbare Datei "desktop.ini", die sich in jedem Fall im Papierkorb-Ordner befindet, davon ausgenommen ist.

Danke an NicoDE!

[edit=Matze][code] durch [delphi]-Tags ersetzt und Code formatiert. Mfg, Matze[/edit]
  Mit Zitat antworten Zitat