Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Betriebssysteme (https://www.delphipraxis.net/27-betriebssysteme/)
-   -   Papierkorb leeren auf allen Partitionen (https://www.delphipraxis.net/120255-papierkorb-leeren-auf-allen-partitionen.html)

Mackhack 8. Sep 2008 05:53


Papierkorb leeren auf allen Partitionen
 
Hallo DPler,

weis jemand wie man die Papierkoerbe auf allen Partitionen leeren kann und nicht nur auf der C: Platte?

Danke!

FAlter 8. Sep 2008 06:57

Re: Papierkorb leeren auf allen Partitionen
 
Hi,

mit ner For-Schleife.

Mfg
FAlter

Mackhack 8. Sep 2008 06:58

Re: Papierkorb leeren auf allen Partitionen
 
Hm, und wie? Ich meine ich hab eigentlich im Windows-Subforum gefragt nicht im Programmieren. Aber eigentlich ist mir beides recht um ehrlich zu sein. Also Problem ist ja dass man auf all den anderen Partition keinen Papierkorb findet!

FAlter 8. Sep 2008 07:14

Re: Papierkorb leeren auf allen Partitionen
 
Hi,


Delphi-Quellcode:
for Drive in Drives do
  try
    Result := SHEmptyRecycleBin(Application.Handle, PChar(Drive + ':\'),
      SHERB_NOCONFIRMATION or SHERB_NOSOUND) = S_OK;
  except
    //AV in SYSTEM32.DLL unter Win9x?
    on EAccessViolation do
      Result := false;
  end;
Warum unter Win98 ne AV kommt hab ich noch nicht herausgefunden :( nur dass diese nicht einmal mit try-except abgefangen wird (bzw. schon, wenn man das on-do weglässt, obwohl die Meldung nach EAccessViolation aussieht :?: ). Ich glaube aber, der Papierkorb wird dann trotzdem geleert, nur das Icon wechselt nicht zu einem leeren Papierkorb.

Unter NT-Systemen funktiniert es jedenfalls so. Drives wäre ein String oder Array of Char, in dem die zu verarbeitenden Laufwerksbuchstaben drinstehen. Alternativ könntest du z. B. auch eine Stringliste durchgehen, in welcher die Stammverzeichnisse drinstehen.

Theoretisch müsstest du bei Partitionen, die keinen Buchstaben haben, den Pfad angeben, in dem sie bereitgestellt werden. Praktisch schiebt Windows es dann in den Übergeordneten Papierkorb (jedenfalls bei XP / was beim Löschen von Verzeichnissen sogar Probleme bereitet - man bekommt Meldungen, das Löschen sei nicht möglich :-( ). Damit reicht es, alle Laufwerksbuchstaben, die in Frage kämen, durchzugehen.

Was meinst du mit "man findet keinen Papierkorb"?

So, bin heute Abend wieder da... Muss jetzt noch abwaschen und dann arbeiten fahren.

Mfg
FAlter

Mackhack 8. Sep 2008 07:16

Re: Papierkorb leeren auf allen Partitionen
 
Naja es gibt halt kein Icon fuer die anderen Partition ausser der wo Windows installiert ist. Das meinte ich damit!

Danke fuer den Code Snippet!

leddl 8. Sep 2008 07:57

Re: Papierkorb leeren auf allen Partitionen
 
Zitat:

Zitat von Mackhack
weis jemand wie man die Papierkoerbe auf allen Partitionen leeren kann und nicht nur auf der C: Platte?

Rechtsklick auf den Papierkorb auf dem Desktop oder im Explorer --> Papierkorb leeren :stupid:
Zitat:

Zitat von Mackhack
Naja es gibt halt kein Icon fuer die anderen Partition ausser der wo Windows installiert ist. Das meinte ich damit!

:gruebel: Also für mich stellt das Icon auf dem Desktop bzw. im Explorer alle gelöschten Daten dar. Wenn du den leerst sollten damit auch alle "lokalen Papierkörbe" geleert sein...

Mackhack 8. Sep 2008 07:59

Re: Papierkorb leeren auf allen Partitionen
 
Zitat:

Zitat von leddl
:gruebel: Also für mich stellt das Icon auf dem Desktop bzw. im Explorer alle gelöschten Daten dar. Wenn du den leerst sollten damit auch alle "lokalen Papierkörbe" geleert sein...

Das dachte ich mir war mir aber nicht sicher!

leddl 8. Sep 2008 08:04

Re: Papierkorb leeren auf allen Partitionen
 
Zitat:

Zitat von Mackhack
Das dachte ich mir war mir aber nicht sicher!

Na dann schau doch mal rein :zwinker: Es steht doch für jede gelöschte Datei der Quellordner dabei. Da mischen sich bei mir im Moment bunt Dateien von der C- und D-Partition ;)

hathor 8. Sep 2008 08:42

Re: Papierkorb leeren auf allen Partitionen
 
Da es nur 1 "Papierkorb" gibt, ist das Löschen einfach:
.
Delphi-Quellcode:
Procedure EmptyRecycleBin ;
Const
     SHERB_NOCONFIRMATION = $00000001;
     SHERB_NOPROGRESSUI  = $00000002;
     SHERB_NOSOUND       = $00000004;
Type
    TSHEmptyRecycleBin = Function(Wnd: HWND; LPCTSTR: PChar; DWORD: Word): Integer; StdCall;
Var
   SHEmptyRecycleBin: TSHEmptyRecycleBin;
   LibHandle: THandle;
Begin
     LibHandle:=LoadLibrary(PChar('Shell32.dll'));
     If LibHandle <> 0 Then
        @SHEmptyRecycleBin:=GetProcAddress(LibHandle, 'SHEmptyRecycleBinA')
     Else Begin
        MessageDlg('Failed to load Shell32.dll.', mtError, [mbOK], 0);
        Exit;
     End;
     If @SHEmptyRecycleBin <> Nil Then
        SHEmptyRecycleBin(Application.Handle, '', SHERB_NOCONFIRMATION Or SHERB_NOPROGRESSUI Or SHERB_NOSOUND);
     FreeLibrary(LibHandle);
     @SHEmptyRecycleBin:=Nil;
End ;

leddl 8. Sep 2008 08:55

Re: Papierkorb leeren auf allen Partitionen
 
Schaut eigentlich nie jemand auf die Sparte beim Antworten? :gruebel: Wir sind hier im Windows-Forum, nicht in einer der Programmierforen...
Warum wird hier denn jetzt mit Code-Schnipseln um sich geworfen, wenn das ganze durch 2 Klicks erledigt werden kann? :roll:


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:29 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz