Announcement

Collapse
No announcement yet.

RECYCLER unter XP

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • RECYCLER unter XP

    Hallo,

    der Papierkorb unter XP heißt nicht nur anders (RECYCLER), sondern er wird vom System offenbar auch völlig anders gesteuert. So sind die gelöschten Dateien in irgendwelchen Unterordnern versteckt, die sehr kryptische Namen haben.
    Weiß schon jemand, wie man diesn Papierkorb mit Delphi behandelt?
    (Also z. Bsp. ob da was drin ist aber eben auch, wie man das selbst alles ordentlich programmtechnisch verwaltet?)

    Gruß
    Matthias

  • #2
    Das dürfte nicht anders sein, als generell unter Windows:

    <pre><b>interface</b><br>
    <i>(********************************
    Recycle.Bin
    ********************************)</i>
    <b>type</b>
    <i>{$EXTERNALSYM _SHQUERYRBINFO}</i>
    _SHQUERYRBINFO =
    <b>packed</b> <b>record</b>
    cbSize : DWORD;
    i64Size : int64;
    i64NumItems : int64;
    <b>end</b>;
    <i>{$EXTERNALSYM TSHQueryRBInfo}</i>
    TSHQueryRBInfo = _SHQUERYRBINFO;
    <i>{$EXTERNALSYM PSHQueryRBInfo}</i>
    PSHQueryRBInfo = ^TSHQueryRBInfo;<br>
    <b>const</b>
    <i>{$EXTERNALSYM SHERB_NOCONFIRMATION}</i>
    SHERB_NOCONFIRMATION = $00000001;
    <i>{$EXTERNALSYM SHERB_NOPROGRESSUI}</i>
    SHERB_NOPROGRESSUI = $00000002;
    <i>{$EXTERNALSYM SHERB_NOSOUND}</i>
    SHERB_NOSOUND = $00000004;<br>
    <i>{$EXTERNALSYM SHQueryRecycleBinA}</i>
    <b>function</b> SHQueryRecycleBinA(pszRootPath: LPCTSTR; <b>var</b> pSHQueryRBInfo: TSHQueryRBInfo): HRESULT; <b>stdcall</b>;
    <i>{$EXTERNALSYM SHQueryRecycleBinW}</i>
    <b>function</b> SHQueryRecycleBinW(pszRootPath: LPWSTR; <b>var</b> pSHQueryRBInfo: TSHQueryRBInfo): HRESULT; <b>stdcall</b>;
    <i>{$EXTERNALSYM SHQueryRecycleBin}</i>
    <b>function</b> SHQueryRecycleBin(pszRootPath: LPCTSTR; <b>var</b> pSHQueryRBInfo: TSHQueryRBInfo): HRESULT; <b>stdcall</b>;
    <i>{$EXTERNALSYM SHEmptyRecycleBinA}</i>
    <b>function</b> SHEmptyRecycleBinA(hwnd: HWND; pszRootPath: LPCTSTR; dwFlags: dword): HRESULT; <b>stdcall</b>;
    <i>{$EXTERNALSYM SHEmptyRecycleBinW}</i>
    <b>function</b> SHEmptyRecycleBinW(hwnd: HWND; pszRootPath: LPWSTR; dwFlags: dword): HRESULT; <b>stdcall</b>;
    <i>{$EXTERNALSYM SHEmptyRecycleBin}</i>
    <b>function</b> SHEmptyRecycleBin(hwnd: HWND; pszRootPath: LPCTSTR; dwFlags: dword): HRESULT; <b>stdcall</b>;<br><br>
    <b>implementation</b><br><br>
    <b>const</b>
    shell32 = 'shell32.dll';<br><br>
    <b>function</b> SHQueryRecycleBinA; <b>external</b> shell32 name 'SHQueryRecycleBinA';
    <b>function</b> SHQueryRecycleBinW; <b>external</b> shell32 name 'SHQueryRecycleBinW';
    <b>function</b> SHQueryRecycleBin; <b>external</b> shell32 name 'SHQueryRecycleBinA';
    <b>function</b> SHEmptyRecycleBinA; <b>external</b> shell32 name 'SHEmptyRecycleBinA';
    <b>function</b> SHEmptyRecycleBinW; <b>external</b> shell32 name 'SHEmptyRecycleBinW';
    <b>function</b> SHEmptyRecycleBin; <b>external</b> shell32 name 'SHEmptyRecycleBinA';<br><br>
    <b>end</b>.</pre>

    Gruß.

    PS: Mehr dazu findest du im MSDN oder PSDK von Microsoft

    Comment


    • #3
      Hallo Mathias,

      vielen Dank. Soweit ist das klar. Aber wie zeige ich die "Klarnamen" der Dateien im Papierkorb unter XP?
      GetDisplaNameOf scheint es unter XP nicht zu machen. Oder doch und ich mache etwas falsch?
      Mit dieser Form des "Aliasnamens" habe ich mich schon mal beschäftigt und das klappte damals auch ganz vorzüglich. Dummerweise habe ich vergessen, wie das Zeug in der MS-Hilfe hieß.
      Kannst Du mir ein Stichwort geben?

      Gruß
      Matthia

      Comment


      • #4
        Hallo,

        inzwischen habe ich es gefunden. "NameMappiong" war das. Nun muss ich "nur noch" rauskriegen, wie ich das damals gemacht habe. :-)
        Ist, wie gesagt, schon lange her und ich finde die Quelltexte momentan nicht.
        Mal sehen... Das muss doch zu machen sein...

        Gruß
        Matthia

        Comment


        • #5
          hi,

          was willst du den mit dem papierkorb?

          wenn du ihn nur aufrufen willst, dass hier tut auch unter xp:

          http://marlem-software.de/prlex_windows_standardordner.htm

          gruß

          marku
          Herzliche Grüße

          Markus Lemcke
          barrierefreies Webdesign

          Comment


          • #6
            Hallo Markus,

            nicht nur aufrufen. Ich habe mir meinen eigenen Dateimanager geschrieben (Der kann weit mehr als alles, was ich kenne!).
            Dafür habe ich nur Freeware oder Opensource genutzt.
            Im Dateimanager möchte man aber auch den Papierkorb ordentlich anzeigen (ein Listview-Derivat) und behandeln.

            Dazu brauche ich dann aber die "Klarnamen" der einzelnen enthaltenen Dateien.

            Gruß
            Matthia

            Comment


            • #7
              @Markus: Vielleicht habe ich dir das schon mal gesagt, aber deine Lösung zum Öffnen von speziellen Ordnern, nun ja ... Sie funktioniert bestimmt, aber ich bevorzuge dann doch dies hier:
              <pre><b>uses</b>
              ShlObj, ShellAPI;<br>
              <b>procedure</b> OpenFolder(iGUID: integer);
              <b>var</b>
              sei : TShellExecuteInfo;
              lpItemId : PItemIdList;
              <b>begin</b>
              <b>if</b>(SHGetSpecialFolderLocation(0,iGUID,lpItemId)
              = NO_ERROR) <b>then</b>
              <b>begin</b>
              ZeroMemory(@sei,sizeof(TShellExecuteInfo));
              sei.cbsize := sizeof(TShellExecuteInfo);
              sei.nShow := SW_SHOWNORMAL;
              sei.lpVerb := 'open';
              sei.fMask := SEE_MASK_IDLIST;
              sei.lpIDList := lpItemId;<br>
              ShellExecuteEx(@sei);
              <b>end</b>;
              <b>end</b>;<br>
              <b>procedure</b> TForm1.Button1Click(Sender: TObject);
              <b>begin</b>
              OpenFolder(<font color=#ff0000>CSIDL_BITBUCKET</font>);
              <b>end</b>;</pre>

              Das öffnet auch den Papierkorb. Und natürlich kann man auch andere Ordner angeben. Man muss sich nur (aus dem PSDK bzw. aus den Borland-Units) die CSIDL-Werte heraussuchen:

              <pre>CSIDL_PERSONAL Eigene Dateien
              CSIDL_NETHOOD Netzwerkumgebung</pre>

              usw.

              @Matthias: Das mit den Klarnamen im Papierkorb habe ich bisher noch nicht ausprobiert. Ich hätte gedacht, dass man den Ordner mit FindFirst/FindNext durchsucht. Hm ... Wenn du deine Quelltexte und damit die Lösung findest, dann wäre es prima, wenn du das mal demonstrierst.

              Gruß

              Comment


              • #8
                Hallo Mathias,

                @Mathias: Ich möchte auch noch mal versuchen, meine Frage auf das Wesentliche zu beschränken.
                Ich möchte also den Papierkorb NICHT öffnen. Schon gar nicht mit dem Explorer.
                Ich möchte einfach eine Liste der in ihm enthaltenen Dateien mit deren "Klarnamen" (also dem eigentlichen Displayname) in einer Listview anzeigen.
                UnterWin98SE bekam man mit "GetDisplayNameOf" immer diesen Klarnamen. Unter Win XP scheint das aber nicht mehr der Fall zu sein.
                Wobei es möglich ist, dass das mit der leicht veränderten Organisation des Papierkorbes (in Unterordnern) zusammenhängt. Da der Explorer das aber normal macht, muss es gehen. Nur wie?

                Gruß
                Matthia

                Comment


                • #9
                  Ja, ich weiß, dass du den Papierkorb <b>nicht</b> öffnen willst. Mein Einwand + Code ging an die Adresse von Markus. Das hatte mit dir nichts zu tun.<br><br>
                  Gruß

                  Comment


                  • #10
                    Hallo,<br>

                    an alle!<br>
                    Ich habe es tatsächlich geschafft! War selbst überrascht!<br>
                    Es geht ganz einfach.<br>
                    IShellFolder.GetDisplayNameOf macht es zwar nicht, sondern gibt nur den kompletten Namen der Datei zurück.<br>
                    Aber dafür macht es SHGetFileInfo. Da kann man dann den Namen von GetDisplayNameOf verwenden.<br>

                    Also vielen Dank an Alle für Eure Mühen.<br>
                    Gruß<br>
                    Matthia

                    Comment


                    • #11
                      @Matthias Jaensch
                      ich habe auch einen dateimanager programmiert und da rufe ich ihn wie gepostet auf! was sagt dein dateimanager zum thema "bedienen mit einer hand"?

                      @Mathias Simmack
                      ich habe mit sicherheit paar mal die frage nachdem aufruf des papierkorbes gestellt und keiner wußte rat! und nun postest du
                      das einfach so nebenher *gg
                      Herzliche Grüße

                      Markus Lemcke
                      barrierefreies Webdesign

                      Comment


                      • #12
                        Hallo Markus,

                        ich habe noch (noch!!!) beide Hände, dafür bin ich gehörlos. Also sind meine Prioritäten etwas anders gesetzt.
                        Außerdem ist Deine Frage gar nicht so leicht zu beantworten. Es hängt immer noch von der Feinmotorik in der Hand ab. Denkbar ist durchaus ein Fall, wo die Tastatur, aber nicht die Maus bedient werden kann - und umgekehrt.
                        Natürlich lässt sich mein Manager vollständig mit der Maus bedienen. Die Tastatur habe ich etwas vernachlässigt, müsste aber eigentlich auch klappen. Und da ist das Problem!
                        Ein Mirosoftspiel hat als "Gewinnabruch" die Tastenkombination "Shift-Alt-F10" und das mache mal mit einer Hand. Ohne Hilfe der Nasenspitze schafft man das wohl kaum.
                        Es ist also sicherlich eine Frage, aber für mich und meinen privaten Dateimanager steht sie so momentan noch nicht.

                        Gruß
                        Matthia

                        Comment


                        • #13
                          hi matthias,

                          wenn er fertig ist, sagbe mir bescheid!
                          testen will ich ihn!
                          warst du schon mal auf meiner internetseite www.marlem-software.de ?
                          ich beschäftige mich mit barriere freier software und internetseiten! vielleicht schaust du dir mal diese http://marlem-software.de/behindir.html und diese http://marlem-software.de/behindirh.html seite an und schaust was man da aus der sicht von gehörlosen ergänzen sollte! würde mich freuen!

                          gruß

                          marku
                          Herzliche Grüße

                          Markus Lemcke
                          barrierefreies Webdesign

                          Comment


                          • #14
                            Hallo Markus,

                            ich komme gerade wieder mal aus dem Krankenhaus, deswegen das lange Schweigen.
                            Schreibe doch bitte mal Deine e-mail. Ich schicke Dir dann den Manager. Der Rest dazu steht alles in der Readme. Habe ich schon vorbereitet!

                            Gruß
                            Matthia

                            Comment


                            • #15
                              hihi! auf meiner hp steht meine email!<br>
                              also hier: <b>[email protected]</b>

                              gruß

                              markus

                              p.s. was machst du im krankehaus
                              Herzliche Grüße

                              Markus Lemcke
                              barrierefreies Webdesign

                              Comment

                              Working...
                              X