Zugriff auf Windows: Papierkorb leeren



  • Moin C++ Freaks !

    Wie kann ich mein Programm dazu veranlassen den Papierkorb von Windows zu leeren ?

    THX



  • SHEmptyRecycleBin



  • Dafür gibt's eine WinAPI Funktion: SHEmptyRecycleBin().

    Joe_M.



  • Jo danke erstmal für die Antworten. 👍

    Für alle die es wissen wollen:

    SHEmptyRecycleBin(0,0,0) // fragt vor dem leeren noch einmal nach
    
    SHEmptyRecycleBin(0,0,1) // leert ohne nachfrage den Papierkorb
    

    Coole Sache das :p

    The Geek!



  • ahh halt stop ... da war doch noch etwas 😃

    Wie kann ich überprüfen ob der Papierkorb voll oder leer ist ?

    THX



  • Stichwort Dokukompetenz:
    Auf der Seite der MSDN Library, auf der SHEmptyRecycleBin dokumentiert ist, steht unter "See Also" ein Verweis auf eine andere Funktion. Vielleicht ist das ja das, was du suchst. 😉



  • Puh !

    Also habe einwenig das I-Net durchforstet und bin auf folgende funkion gestossen:

    SHQUERYRBINFO info;
      ZeroMemory(&info, sizeof(info));
      info.cbSize = sizeof(info);
      SHQueryRecycleBin(0, &info);
    

    Hier der Link zur Seite!

    Mhh aber irgentwie geht das net ... es gibt immer nur eine "0" aus 😞 egal ob der Papierkorb voll oder leer ist ...

    Was mach ich falsch ?



  • Da steht doch im Titel schon "Zugriff auf Windows". Zugriffe auf Windows lassen sich nur über die passende API also WinAPI realisieren. Dazu haben wir ein extra forum. Da hat das Thema also absolut null mit der VCL oder der CLX zu tun.

    Hast du die Funktion 1:1 kopiert?

    -junix



  • Dieser Thread wurde von Moderator/in junix aus dem Forum Borland C++ Builder (VCL/CLX) in das Forum WinAPI verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.





  • Auch wenn ich das nicht so gerne mache weil man dann ja nicht versteht was im code steht ... aber JA ich habe sie einfach mal so kopiert.

    Vielecht scheitert es auch daran dass ich net so genau weiss wie man eine Funkion in C++ aufruft. 🙄 (hab das nur mal in JavaScript gemacht)

    Also kann mir einer meiner Unwissenheit ein ende setzen und mir etwas auf die Sprünge helfen. 😕

    bool CanEmptyRecycleBin()
    {
      SHQUERYRBINFO info; // SHQUERYRBINFO die Variable info zuweisen
      ZeroMemory(&info, sizeof(info)); // ? Speicher auf null setzen ?
      info.cbSize = sizeof(info); // info und DWORD cbSize verknüpfen
      SHQueryRecycleBin(0, &info); // SHQueryRecycleBin aufrufen
    
      return (info.i64NumItems > 0); // zurück wenn info.i64NumItems grösser als 0
    }
    


  • Dank @ flenders aber dort war ich heute als aller erstest und weil ich da nicht weiter gekommen bin habe ich einwenig gegoogelt ...

    💡



  • Benutzt Du Windows 2000?

    MSDN schrieb:

    With Microsoft® Windows® 2000, if NULL is passed in the pszRootPath parameter, the function fails and returns an E_INVALIDARG error code.

    Andererseits:
    Die Funktion liefert S_OK turück, wenn sie erfolgreich war.
    In der Winerror.h findet man folgende Zeile:

    #define S_OK ((HRESULT)0x00000000L)
    

    Also ist doch alles okay wenn die Funktion 0 zurückliefert!
    Das Ergebnis steht in der SHQUERYRBINFO-Struktur!

    Das mußt Du auslesen, was Dein return (info.i64NumItems > 0) ja auch tut...
    Also sollte das bei vollem Papierkorb != 0 sein...



  • Nicht ganz benutze Windoof XP SP1 ...
    (ist ja FAST 🙄 das Selbe wie Win 2K)

    💡 💡



  • Dann überprüf mal den Rückgabewert von SHQueryRecycleBin direkt, ob es S_OK oder E_INVALIDARG ist...



  • Bin nicht so der C++ Profi kannst du mir eventuell zeigen wie ich den return wert oder die Funkion auswerte/aufrufe ?

    BEDANKT ! 😉



  • z. B. so:

    bool CanEmptyRecycleBin()
    {
      HRESULT Success = 0;
      SHQUERYRBINFO info; // SHQUERYRBINFO die Variable info zuweisen
      ZeroMemory(&info, sizeof(info)); // ? Speicher auf null setzen ?
      info.cbSize = sizeof(info); // info und DWORD cbSize verknüpfen
      Success = SHQueryRecycleBin(0, &info); // SHQueryRecycleBin aufrufen
      if (Success != S_OK)
      {
         MessageBox(NULL, "Fehler bei SHQueryRecycleBin", "Fehler!", MB_OK|MB_ICONERROR);
         return FALSE;
      }
      return (info.i64NumItems > 0); // zurück wenn info.i64NumItems grösser als 0
    }
    


  • ahh das sieht gut aus ... 🙂

    Habe schon einwenig im Netz gesucht aber nix gefunden ...
    Wie kann ich diese (oder auch andere) selbst geschriebene Funkionen in meinem Quelltext aufrufen ? 😕
    Wie gesagt habe das mit den Funkionen nur mal in JavaScript gemacht. Aber wie geht´s in C++ ???

    so geht´s irgentwie nicht:

    //---------------------------------------------------------------------------
    void __fastcall TForm1::Label3Click(TObject *Sender)
    {
    CanEmptyRecycleBin();
    }
    //---------------------------------------------------------------------------
    

    Aber ich denke ich bin nah drann 😃



  • so rufst die funktion auf, aber es bring nix weil du den rückgabewert in abfängst.

    if(CanEmptyRecycleBin())
    {
        MessageBox(NULL, "Papierkorb kann geleert werden", "info", MB_OK);
        // ..
    }
    else
        MessageBox(NULL, "Papierkorb schon leer", "info", MB_OK);
    

    sei mir nicht böse, aber du solltest dir erstmal ein grundladentutorial durchlesen. http://www.c-plusplus.net/tutorials.htm



  • Nö bin dir net böse.

    Ich bin klein und muss noch vieeel lernen 🙂

    Deswegen bin ich auch oft hier im Forum und lese die Beiträge.

    ... Okay ich arbeite das Tut durch ...

    //---------------------------------------------------\\

    Aber es geht leder immer noch nicht 😞

    Warum ?

    Ich beiss gleich in meine Tastatur !

    GRRR 😡


Anmelden zum Antworten